{ "info": { "author": "Zach Hart", "author_email": "zach@csh.rit.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: System :: Logging" ], "description": "Pourover: Log Parsing for Lizards\n=================================\n\n.. image:: https://img.shields.io/badge/license-Apache%202.0-blue.svg\n :target: LICENSE\n\n.. image:: https://img.shields.io/badge/python-3.6,%203.7-blue.svg\n :target: https://pypi.org/project/pourover/\n\n.. image:: https://img.shields.io/badge/pypi-v0.1--beta8-green.svg\n :target: https://pypi.org/project/pourover/\n\n.. image:: https://circleci.com/gh/zthart/pourover/tree/develop.svg?style=svg\n :target: https://circleci.com/gh/zthart/pourover/tree/develop\n\nPourover is the only *chemicaly-altered* CEF Log Parsing library for\nPython, ideal for consumption by Lizard People.\n\n.. figure:: https://user-images.githubusercontent.com/4873335/38774515-0f0b5514-4039-11e8-8437-facadd57a85c.jpg\n :alt: the requests guy does it so maybe it'll work for me\n\nSome stuff we can do:\n\n.. code-block:: python\n\n from datetime import datetime\n import pourover\n\n\n # Create log objects from a file\n log = pourover.parse_file('test.log')\n\n # check the length pythonically - expose useful properties\n if len(log) > 10:\n if log.has_syslog_prefix and log.start_time > datetime(year=2018, month=4, day=20):\n # perform some operations\n pass\n else:\n # perform some operations on a logfile that doesn't have syslog prefixes\n pass\n else:\n # perform some operations on a really small log\n pass\n\n # Find messages with a certain value in the header\n search_results = log.search_headers('Specific Vendor')\n\n for message in log:\n # iterate through each message in the log like you'd expect to be able to\n pass\n\n # Logs can be indexed/sliced in the way you'd expect\n first_message = log[0]\n last_message = log[-1]\n\n # Create message objects from a string\n message = pourover.parse_line('Apr 15 22:11:20 testhost CEF:0|Test Vendor|Test Product|Test Version|100|Test Name|100|src=1.1.1.1 dst=1.1.1.2')\n\n if message.has_syslog_prefix:\n if message.timestamp > datetime(year=2018, month=4, day=20):\n # perform an operation on logs from later than April 20th, 2018\n pass\n\n if 'src' in message.extensions:\n # do something if it's got an extension called 'src'\n pass\n\n if message.device_vendor == 'Some Vendor':\n # do something if the vendor is Some Vendor\n pass\n\n # stick this message right onto that log (it'll even order the messages by timestamp - wow!)\n log.append(message)\n\nInstalling :computer:\n---------------------\n\nTo install Pourover, simply run\n\n.. code-block:: bash\n\n $ pip install pourover\n \u2728\ud83d\udc0a\u2728\n\nFeatures :crocodile:\n--------------------\n\n| - :dragon_face: Create CEF-formatted log lines from parameters with support for extensions and a syslog prefix\n| - :dragon_face: Create useful line objects from a string, or an entire log object from a file\n| - :dragon_face: Iterable log objects to manipulate collections of logs at once\n| - :dragon_face: Parse lines with or without syslog prefixes *or* extensions with ease\n| - :dragon_face: Search logs for messages with specific headers or extensions\n| - :dragon_face: **And more to come...**\n\nContributing :dragon:\n---------------------\n\n| :bug: **Bugs:**\n| Please create any issues you think I should check out! If there's a\n bug you spot or a function you think is acting up, please let me know.\n This project will have tests eventually, but until then I'm sure there\n will be issues sprouting up from time to time!\n\n| :sparkles: **New Features/PRs:**\n| The project is still in it's infancy, so PRs might have a rough time\n getting merged in while the codebase is in a constant state of flux,\n but I'd me more than happy to have a discussion with you about a new\n feature you'd like to see!\n\nGet in Touch :snake:\n--------------------\n\nIf you've found a Bug or would like to make a feature request, please\nsee the **Contributing** section above, thanks!\n\nIf you'd like to reach out, shoot me an email at `zach@csh.rit.edu `_.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zthart/pourover", "keywords": "CEF parsing formatting log messages", "license": "", "maintainer": "Zach Hart", "maintainer_email": "zach@csh.rit.edu", "name": "pourover", "package_url": "https://pypi.org/project/pourover/", "platform": "any", "project_url": "https://pypi.org/project/pourover/", "project_urls": { "Homepage": "https://github.com/zthart/pourover" }, "release_url": "https://pypi.org/project/pourover/0.1b8/", "requires_dist": null, "requires_python": "", "summary": "Python CEF Parsing for Lizard People", "version": "0.1b8" }, "last_serial": 4565850, "releases": { "0.1.0b4": [ { "comment_text": "", "digests": { "md5": "fc449865320df14cb25aad7250a95435", "sha256": "f01894f767de18577e33f8b30718c154ddef1d1fc17badf9d091396330fc4b4f" }, "downloads": -1, "filename": "pourover-0.1.0b4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc449865320df14cb25aad7250a95435", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12157, "upload_time": "2018-04-18T00:00:56", "url": "https://files.pythonhosted.org/packages/16/0a/c0c45fb81637d6b52b90f02ffa78e90903e4208db627661c407cd7298b91/pourover-0.1.0b4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d72f69c4e76b00e240fd948e6ad2fdf", "sha256": "39bd24f927b37ffa788982eae30579900ebb830dfca2f083c90b63efdb8f3c42" }, "downloads": -1, "filename": "pourover-0.1.0b4.tar.gz", "has_sig": false, "md5_digest": "9d72f69c4e76b00e240fd948e6ad2fdf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12070, "upload_time": "2018-04-18T00:00:57", "url": "https://files.pythonhosted.org/packages/48/a2/e0bc8fc8b185169a431d95a194ad777e8b387d17b120dd534c318a0d66ca/pourover-0.1.0b4.tar.gz" } ], "0.1b5": [ { "comment_text": "", "digests": { "md5": "4e482ebe1d7edcbf9d01ef4a928c4ad3", "sha256": "ef281767dfd2ef6fa52e9ffc80d1316bdef2f3f4e7f1bda852dada8cc701ead7" }, "downloads": -1, "filename": "pourover-0.1b5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e482ebe1d7edcbf9d01ef4a928c4ad3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12683, "upload_time": "2018-04-19T01:25:54", "url": "https://files.pythonhosted.org/packages/f9/2a/919df82ef5db8e23bba248ddb1ceef14b7f6f2d34fd841e2fcc68d18806b/pourover-0.1b5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26d8dc8675d192f1daf43e4ae76d4942", "sha256": "7178fee3bcf6bb86c88aace3f619c65eb507df0366c58bb08b772a22cd81c6bb" }, "downloads": -1, "filename": "pourover-0.1b5.tar.gz", "has_sig": false, "md5_digest": "26d8dc8675d192f1daf43e4ae76d4942", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14369, "upload_time": "2018-04-19T01:25:55", "url": "https://files.pythonhosted.org/packages/8c/ac/f6816eaf449c97a17dd6e1112864b19862526ddec56c187430ad78f7bd91/pourover-0.1b5.tar.gz" } ], "0.1b6": [ { "comment_text": "", "digests": { "md5": "a66c352c6eb37571392b1f48851c3800", "sha256": "6ebe018133cb436044b41bf642dc4322f1e421fdd95cad4da7b4e0f1660bbab7" }, "downloads": -1, "filename": "pourover-0.1b6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a66c352c6eb37571392b1f48851c3800", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17869, "upload_time": "2018-05-12T14:49:24", "url": "https://files.pythonhosted.org/packages/82/ae/3b3448025ada3aa1c3bc5d88ba0291a2ae4acedcd35f4f5542263c2dc35a/pourover-0.1b6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ced1139870025a9a3781c6cf77e7fb9c", "sha256": "856babfb7c2d24eb25a410d8ba54e5f5ddc6ed4467c9af411392b7d36651e850" }, "downloads": -1, "filename": "pourover-0.1b6.tar.gz", "has_sig": false, "md5_digest": "ced1139870025a9a3781c6cf77e7fb9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13328, "upload_time": "2018-05-12T14:49:27", "url": "https://files.pythonhosted.org/packages/ed/1f/5337df1a323b308c541071c0c9db720733a689acb9e4054026bd1ff63044/pourover-0.1b6.tar.gz" } ], "0.1b7": [ { "comment_text": "", "digests": { "md5": "83fdd34e1140c5f2fb4ecc82f12277aa", "sha256": "fd5948be5849ba20e5fe4de83f19eca572b1c76dd9d6d50d9877f7a22df066e8" }, "downloads": -1, "filename": "pourover-0.1b7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83fdd34e1140c5f2fb4ecc82f12277aa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15257, "upload_time": "2018-12-05T03:09:49", "url": "https://files.pythonhosted.org/packages/c6/26/c3e3cde2df93d2da76fdf54cbf16696fcac331164c81868f3f0c8692ea6c/pourover-0.1b7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96336ebbfd37b8d8c0204e0da91bcaf2", "sha256": "c5150bfeb55a87d9e133b33853bc424304e73eb67a2784aecf21d1d4e549b769" }, "downloads": -1, "filename": "pourover-0.1b7.tar.gz", "has_sig": false, "md5_digest": "96336ebbfd37b8d8c0204e0da91bcaf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15032, "upload_time": "2018-12-05T03:09:51", "url": "https://files.pythonhosted.org/packages/3d/f4/2b9d86fff7ae5ba6aab26ec5fab4d347d72a1e1b526d0b84e6f57b3026e4/pourover-0.1b7.tar.gz" } ], "0.1b8": [ { "comment_text": "", "digests": { "md5": "7f019a463fdb02ba9f0ea9c79bcb2ee7", "sha256": "21c94f71bca39fcdd2fe7f7efd80fd6db893a577bb413a9a1aa69c7af6d34d0e" }, "downloads": -1, "filename": "pourover-0.1b8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f019a463fdb02ba9f0ea9c79bcb2ee7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15226, "upload_time": "2018-12-05T22:57:38", "url": "https://files.pythonhosted.org/packages/96/f2/efb4e0f8283d86e882c3d38444c1da53ddd1b226218d0ab2c440e2fd7bc2/pourover-0.1b8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d55105893837ba30b1053380d94c9eb", "sha256": "7e65d73c4ebb02787d4d34b5a68de2b2a0a6e0c90bd4100e317441769fe0febe" }, "downloads": -1, "filename": "pourover-0.1b8.tar.gz", "has_sig": false, "md5_digest": "3d55105893837ba30b1053380d94c9eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15054, "upload_time": "2018-12-05T22:57:40", "url": "https://files.pythonhosted.org/packages/1c/8c/1f11f402f120d9bc8195147101a2b6b3aa0019803674ce1c148698905e39/pourover-0.1b8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7f019a463fdb02ba9f0ea9c79bcb2ee7", "sha256": "21c94f71bca39fcdd2fe7f7efd80fd6db893a577bb413a9a1aa69c7af6d34d0e" }, "downloads": -1, "filename": "pourover-0.1b8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f019a463fdb02ba9f0ea9c79bcb2ee7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15226, "upload_time": "2018-12-05T22:57:38", "url": "https://files.pythonhosted.org/packages/96/f2/efb4e0f8283d86e882c3d38444c1da53ddd1b226218d0ab2c440e2fd7bc2/pourover-0.1b8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d55105893837ba30b1053380d94c9eb", "sha256": "7e65d73c4ebb02787d4d34b5a68de2b2a0a6e0c90bd4100e317441769fe0febe" }, "downloads": -1, "filename": "pourover-0.1b8.tar.gz", "has_sig": false, "md5_digest": "3d55105893837ba30b1053380d94c9eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15054, "upload_time": "2018-12-05T22:57:40", "url": "https://files.pythonhosted.org/packages/1c/8c/1f11f402f120d9bc8195147101a2b6b3aa0019803674ce1c148698905e39/pourover-0.1b8.tar.gz" } ] }