{ "info": { "author": "Ronald Evers", "author_email": "ronald@ch10.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Logging" ], "description": "Snitch\n======\n\nUtilities for working with\n[Sentry](https://github.com/getsentry/sentry). We got into trouble\nusing the in-app Sentry client\n[raven-python](https://github.com/getsentry/raven-python) client with\nhigh volumes so we decided to take the HTTP posting to Sentry out of\nthe app itself. Snitch helps here.\n\nlog2json\n--------\n\nis a stdlib log formatter that will output log record in Sentry's JSON\nformat. You can use any handler, but we use it with a file handler so\nthe app can always quickly dump the log record and does not have to\nwait for an HTTP post.\n\nsnitch\n------\n\nmonitors a logfile for new lines (like tail but skips all existing\ncontent) and sends each new line in a HTTP POST request to the Sentry\nAPI. Snitch reloads the log file every half minute or so. On one hand,\nthis is a workaround to deal with log rotation, on the other hand,\nthis deals with high log volumes by just dropping everything and\nresynching with the present. I mean, when it reopens the file it\neffectively skips everything that was already logged to the file but\nnot yet processed because it continues at the end of the file after a\nreopen. This is what we want. Also, snitch does a time.sleep(.1)\nbetween all POSTS as a rate-limiter.\n\nalternatives\n------------\n\nI haven't looked into using UDP instead of TCP for sending the\nmessages. This may solve problems on the sending host, but still has\nthe potential of flooding Sentry.\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ronaldevers/snitch", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "snitch", "package_url": "https://pypi.org/project/snitch/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/snitch/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/ronaldevers/snitch" }, "release_url": "https://pypi.org/project/snitch/0.1/", "requires_dist": null, "requires_python": null, "summary": "JSON log formatter and Sentry client", "version": "0.1" }, "last_serial": 799771, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "2c5374409cc7b20a78c45a07f22c006c", "sha256": "7eae7715b3fff07a04147efd9dcbf73300795895729c626c2fd2265aa17e89b0" }, "downloads": -1, "filename": "snitch-0.1.tar.gz", "has_sig": false, "md5_digest": "2c5374409cc7b20a78c45a07f22c006c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5118, "upload_time": "2013-01-02T14:42:57", "url": "https://files.pythonhosted.org/packages/64/95/ea6fbb8f1aa66cf4e23c16c37fbef94cbb3dd7439b02f398004da788ba29/snitch-0.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "1a06af6eb6f1d75cb6db929f6acf0c92", "sha256": "aed1063f5c863d4ba9be6fb6f2e05be527d4db5f741c8a41a19d1e53310f1480" }, "downloads": -1, "filename": "snitch-0.2.tar.gz", "has_sig": false, "md5_digest": "1a06af6eb6f1d75cb6db929f6acf0c92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5103, "upload_time": "2013-01-08T16:02:59", "url": "https://files.pythonhosted.org/packages/99/c9/2234d747584a9ea6f62132a5ca076f9458df8a5070bd663a0544b8f420a9/snitch-0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "c0960ce69b9131c3ebc809de945a6d32", "sha256": "c630cc6345010cf7102c53e440ed3613663b1a915a3652785357593dad67c69b" }, "downloads": -1, "filename": "snitch-0.3.tar.gz", "has_sig": false, "md5_digest": "c0960ce69b9131c3ebc809de945a6d32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5249, "upload_time": "2013-04-10T16:02:53", "url": "https://files.pythonhosted.org/packages/47/32/1725d20ac2fde43bc19d3c17b31ec5a27105634e07188c728a32c730684d/snitch-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2c5374409cc7b20a78c45a07f22c006c", "sha256": "7eae7715b3fff07a04147efd9dcbf73300795895729c626c2fd2265aa17e89b0" }, "downloads": -1, "filename": "snitch-0.1.tar.gz", "has_sig": false, "md5_digest": "2c5374409cc7b20a78c45a07f22c006c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5118, "upload_time": "2013-01-02T14:42:57", "url": "https://files.pythonhosted.org/packages/64/95/ea6fbb8f1aa66cf4e23c16c37fbef94cbb3dd7439b02f398004da788ba29/snitch-0.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "1a06af6eb6f1d75cb6db929f6acf0c92", "sha256": "aed1063f5c863d4ba9be6fb6f2e05be527d4db5f741c8a41a19d1e53310f1480" }, "downloads": -1, "filename": "snitch-0.2.tar.gz", "has_sig": false, "md5_digest": "1a06af6eb6f1d75cb6db929f6acf0c92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5103, "upload_time": "2013-01-08T16:02:59", "url": "https://files.pythonhosted.org/packages/99/c9/2234d747584a9ea6f62132a5ca076f9458df8a5070bd663a0544b8f420a9/snitch-0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "c0960ce69b9131c3ebc809de945a6d32", "sha256": "c630cc6345010cf7102c53e440ed3613663b1a915a3652785357593dad67c69b" }, "downloads": -1, "filename": "snitch-0.3.tar.gz", "has_sig": false, "md5_digest": "c0960ce69b9131c3ebc809de945a6d32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5249, "upload_time": "2013-04-10T16:02:53", "url": "https://files.pythonhosted.org/packages/47/32/1725d20ac2fde43bc19d3c17b31ec5a27105634e07188c728a32c730684d/snitch-0.3.tar.gz" } ] }