{ "info": { "author": "Clearcode - The A Room", "author_email": "thearoom@clearcode.cc", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "[![Build Status](https://travis-ci.org/ClearcodeHQ/ianitor.svg?branch=master)](https://travis-ci.org/ClearcodeHQ/ianitor)\n[![Coverage Status](https://img.shields.io/coveralls/ClearcodeHQ/ianitor.svg)](https://coveralls.io/r/ClearcodeHQ/ianitor)\n\n# ianitor\n\n**ianitor** is a doorkeeper for your services discovered using\n[consul](https://www.consul.io/). It can automatically register new services\nthrough consul API and manage TTL health checks.\n\nIt provides simple shell command that wraps process and can be simply used in\nyour existing process/service supervision tool like \n[supervisord](http://supervisord.org/), \n[circus](http://circus.readthedocs.org/en/0.11.1/),\n[runit](http://smarden.org/runit/) etc.\n\n## Consul/Python versions compatibility\n\n**ianitor** is compatibile with Python 2.7, 3.3, 3.4, and 3.5 versions.\nIt is also tested against each latest patch version of every major/minor consul\nrelease starting from 0.4.1 version.\n\nFor details of our test matrix see `travis.yml` file.\n\n## Installation and usage\n\nSimply install with pip:\n\n $ pip install ianitor\n\nAnd you're ready to go with:\n\n $ ianitor appname -- ./yourapp --some-switch\n\nYou can check if service is registered diggin' into consul DNS service:\n\n```console\n$ dig @localhost -p 8600 appname.service.consul\n; <<>> DiG 9.9.3-P1 <<>> @localhost -p 8600 appname.service.consul\n; (1 server found)\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25966\n;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0\n;; WARNING: recursion requested but not available\n\n;; QUESTION SECTION:\n;appname.service.consul.\t\tIN\tA\n\n;; ANSWER SECTION:\nappname.service.consul.\t0\tIN\tA\t10.54.54.214\n\n;; Query time: 44 msec\n;; SERVER: 127.0.0.1#8600(127.0.0.1)\n;; WHEN: Tue Oct 28 13:53:09 CET 2014\n;; MSG SIZE rcvd: 78\n```\n\nFull usage:\n\n usage: ianitor [-h] [--consul-agent hostname[:port]] [--ttl seconds]\n [--heartbeat seconds] [--tags tag] [--id ID] [--port PORT] [-v]\n service-name -- command [arguments]\n\n Doorkeeper for consul discovered services.\n\n positional arguments:\n service-name service name in consul cluster\n\n optional arguments:\n -h, --help show this help message and exit\n --consul-agent=hostname[:port] set consul agent address\n --ttl=seconds set TTL of service in consul cluster\n --heartbeat=seconds set process poll heartbeat (defaults to\n ttl/10)\n --tags=tag set service tags in consul cluster (can be\n used multiple times)\n --id=ID set service id - must be node unique\n (defaults to service name)\n --port=PORT set service port\n -v, --verbose enable logging to stdout (use multiple times\n to increase verbosity)\n\n\n## How does ianitor work?\n\nianitor spawns process using python's `subprocess.Popen()` with command line\nspecified after `--` . It redirects its own stdin to child's stdin and\nchilds stdout/stderr to his own stdout/stderr.\n\nThis way ianitor does not interfere with logging of managed service if it\nlogs to stdout. Moreover ianitor does not log anything to make it easier to\nplug it in your existing process supervision tool.\n\nianitor handles service registration in consul agent as well as keeping\nregistered service entry in consul in \"healthy\" state by continously requesting\nit's [TTL health check endpoint](http://www.consul.io/docs/agent/checks.html).\n\n## Example supervisord config\n\nAssuming that you have some service under supervisord supervision:\n\n```ini\n[program:rabbitmq]\ncommand=/usr/sbin/rabbitmq-server\npriority=0\n\nautostart=true\n```\n\nSimply wrap it with ianitor call:\n\n```ini\n[program:rabbitmq]\ncommand=/usr/local/bin/ianitor rabbitmq -- /usr/sbin/rabbitmq-server\npriority=0\n\nautostart=true\n```\n\n## Licence\n\n`ianitor` is licensed under LGPL license, version 3.\n\n\n## Contributing and reporting bugs\n\nSource code is available at:\n[ClearcodeHQ/ianitor](https://github.com/ClearcodeHQ/ianitor). Issue tracker\nis located at [GitHub Issues](https://github.com/ClearcodeHQ/ianitor/issues).\nProjects [PyPi page](https://pypi.python.org/pypi/ianitor).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ClearcodeHQ/ianitor", "keywords": "", "license": "LGPL", "maintainer": "", "maintainer_email": "", "name": "ianitor", "package_url": "https://pypi.org/project/ianitor/", "platform": "", "project_url": "https://pypi.org/project/ianitor/", "project_urls": { "Homepage": "https://github.com/ClearcodeHQ/ianitor" }, "release_url": "https://pypi.org/project/ianitor/0.1.0/", "requires_dist": [ "python-consul (<0.8.0,>=0.7.0)" ], "requires_python": "", "summary": "Doorkeeper for consul discovered services.", "version": "0.1.0" }, "last_serial": 3830614, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "48329babb41eca1d695ef11c340728f9", "sha256": "20149e4b46c6cbeed44f79326def786bc15a184f1a77283edd5eb2f9021d49ea" }, "downloads": -1, "filename": "ianitor-0.0.1.tar.gz", "has_sig": false, "md5_digest": "48329babb41eca1d695ef11c340728f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7597, "upload_time": "2014-10-30T13:13:11", "url": "https://files.pythonhosted.org/packages/a8/5e/9bd7cd52270968aa55dd54bfc5ce18ea1cab46b4406a94fe0a14ee58bb9d/ianitor-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "11f7f6f0a8ecad6055039ec1ea09e82e", "sha256": "91cc9ccfda14304878e5cdbbcbd2c6c6a1b23f8660d69fdebb916ceb19b5cc9e" }, "downloads": -1, "filename": "ianitor-0.0.2.tar.gz", "has_sig": false, "md5_digest": "11f7f6f0a8ecad6055039ec1ea09e82e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8363, "upload_time": "2015-03-13T12:41:46", "url": "https://files.pythonhosted.org/packages/48/13/9d3b1f4ed711cb3159f1c75b66d92b1c444b9e6b9028089d46d2f2e25fc1/ianitor-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "b4beab5a5574cb58229fff83a44a01fd", "sha256": "fd137480934063b8fbd41fa93a5e7c5051837534f70d4fefc74390f9c50abbeb" }, "downloads": -1, "filename": "ianitor-0.0.3.tar.gz", "has_sig": false, "md5_digest": "b4beab5a5574cb58229fff83a44a01fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8647, "upload_time": "2015-06-08T11:05:41", "url": "https://files.pythonhosted.org/packages/cc/f4/d51abf918afe89de51b569808ef02cb8acd6b51819baa7f71c2938c62d7d/ianitor-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "54818c4d289588805d21655aebeae9f1", "sha256": "ed555422ef5832207ecc1423f0869822128bca16c2ca0ace62bdd78f3cd073af" }, "downloads": -1, "filename": "ianitor-0.0.4.tar.gz", "has_sig": false, "md5_digest": "54818c4d289588805d21655aebeae9f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8685, "upload_time": "2015-06-08T11:03:38", "url": "https://files.pythonhosted.org/packages/b0/20/e27c2d5571049b844cae96d55208a5a487d6a976db0262e822c19c8c2d68/ianitor-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "2f59784f66be4f22a607a750a34d9172", "sha256": "a0eed4550e82cd6a1b1a5f9debc77b2d0d2414f69613e1efc5ce7ab7c15f237c" }, "downloads": -1, "filename": "ianitor-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2f59784f66be4f22a607a750a34d9172", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12239, "upload_time": "2017-08-02T10:52:20", "url": "https://files.pythonhosted.org/packages/7d/18/345d5a59349edfd2624b873f7430f3c5e7c7c0656f715d06878a00908495/ianitor-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe372aec322925f39d94de73d85b6cbb", "sha256": "3c0585b8eb76c89fea04e0e48d9f3225607c17e3f2a1fdf64d4ab6c60bd6139b" }, "downloads": -1, "filename": "ianitor-0.0.5.tar.gz", "has_sig": false, "md5_digest": "fe372aec322925f39d94de73d85b6cbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9584, "upload_time": "2017-08-02T10:52:18", "url": "https://files.pythonhosted.org/packages/f6/56/00f9b5511e105e26da818241cf819f5eff22b02afe4fc890982dc5ddd91d/ianitor-0.0.5.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "7f17fa4508482bf71a4c9748a70dd5c9", "sha256": "264eb38dcfa9b9172c311b314333f547229581b7b8fbbcc01ceaf0d3d1c73e85" }, "downloads": -1, "filename": "ianitor-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f17fa4508482bf71a4c9748a70dd5c9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9344, "upload_time": "2018-05-03T11:35:35", "url": "https://files.pythonhosted.org/packages/a8/80/b89c946d8808448a3d81470b8218fbb214e8adeb4390d6b8e3b6797f1e8c/ianitor-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16cd0d5d704ab5ccff436f0575f9b6cb", "sha256": "379c4831387b8124ad4259197275635baf70ab32d395f1d88aea778d183ba484" }, "downloads": -1, "filename": "ianitor-0.1.0.tar.gz", "has_sig": false, "md5_digest": "16cd0d5d704ab5ccff436f0575f9b6cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7800, "upload_time": "2018-05-03T11:35:37", "url": "https://files.pythonhosted.org/packages/3e/10/012209b1e64f44e9fcd3fec93135ab7908f0920fa2b9145017038259433c/ianitor-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7f17fa4508482bf71a4c9748a70dd5c9", "sha256": "264eb38dcfa9b9172c311b314333f547229581b7b8fbbcc01ceaf0d3d1c73e85" }, "downloads": -1, "filename": "ianitor-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f17fa4508482bf71a4c9748a70dd5c9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9344, "upload_time": "2018-05-03T11:35:35", "url": "https://files.pythonhosted.org/packages/a8/80/b89c946d8808448a3d81470b8218fbb214e8adeb4390d6b8e3b6797f1e8c/ianitor-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16cd0d5d704ab5ccff436f0575f9b6cb", "sha256": "379c4831387b8124ad4259197275635baf70ab32d395f1d88aea778d183ba484" }, "downloads": -1, "filename": "ianitor-0.1.0.tar.gz", "has_sig": false, "md5_digest": "16cd0d5d704ab5ccff436f0575f9b6cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7800, "upload_time": "2018-05-03T11:35:37", "url": "https://files.pythonhosted.org/packages/3e/10/012209b1e64f44e9fcd3fec93135ab7908f0920fa2b9145017038259433c/ianitor-0.1.0.tar.gz" } ] }