{ "info": { "author": "Nikolay Novik", "author_email": "nickolainovik@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "aiomonitor\n==========\n.. image:: https://travis-ci.com/aio-libs/aiomonitor.svg?branch=master\n :target: https://travis-ci.com/aio-libs/aiomonitor\n.. image:: https://codecov.io/gh/aio-libs/aiomonitor/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/aio-libs/aiomonitor\n.. image:: https://api.codeclimate.com/v1/badges/d14af4cfb0c4ff52b1ef/maintainability\n :target: https://codeclimate.com/github/aio-libs/aiomonitor/maintainability\n :alt: Maintainability\n.. image:: https://img.shields.io/pypi/v/aiomonitor.svg\n :target: https://pypi.python.org/pypi/aiomonitor\n.. image:: https://readthedocs.org/projects/aiomonitor/badge/?version=latest\n :target: http://aiomonitor.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n :target: https://gitter.im/aio-libs/Lobby\n :alt: Chat on Gitter\n\n**aiomonitor** is Python 3.5+ module that adds monitor and cli capabilities\nfor asyncio_ application. Idea and code borrowed from curio_ project.\nTask monitor that runs concurrently to the asyncio_ loop (or fast drop in\nreplacement uvloop_) in a separate thread as result monitor will work even if\nevent loop is blocked for some reason.\n\nLibrary provides an python console using aioconsole_ module, it is possible\nto execute asynchronous command inside your running application. Extensible\nwith you own commands, in the style of the standard library's cmd_ module\n\n+--------------------------------------------------------------------------------------+\n| .. image:: https://raw.githubusercontent.com/aio-libs/aiomonitor/master/docs/tty.gif |\n+--------------------------------------------------------------------------------------+\n\nInstallation\n------------\nInstallation process is simple, just::\n\n $ pip install aiomonitor\n\n\nExample\n-------\nMonitor has context manager interface:\n\n.. code:: python\n\n import aiomonitor\n\n loop = asyncio.get_event_loop()\n with aiomonitor.start_monitor(loop=loop):\n loop.run_forever()\n\nNow from separate terminal it is possible to connect to the application::\n\n $ nc localhost 50101\n\nor using included python client::\n\n $ python -m aiomonitor.cli\n\nTutorial\n--------\n\nLets create simple aiohttp_ application, and see how ``aiomonitor`` can\nintegrates with it.\n\n.. code:: python\n\n import asyncio\n\n import aiomonitor\n from aiohttp import web\n\n # Simple handler that returns response after 100s\n async def simple(request):\n loop = request.app.loop\n\n print('Start sleeping')\n await asyncio.sleep(100, loop=loop)\n return web.Response(text=\"Simple answer\")\n\n loop = asyncio.get_event_loop()\n # create application and register route\n app = web.Application(loop=loop)\n app.router.add_get('/simple', simple)\n\n # it is possible to pass dictionary with local variables\n # to the python console environment\n host, port = \"localhost\", 8090\n locals_ = {\"port\": port, \"host\": host}\n # init monitor just before run_app\n with aiomonitor.start_monitor(loop=loop, locals=locals_):\n # run application with built in aiohttp run_app function\n web.run_app(app, port=port, host=host)\n\nLets save this code in file ``simple_srv.py``, so we can run it with command::\n\n $ python simple_srv.py\n ======== Running on http://localhost:8090 ========\n (Press CTRL+C to quit)\n\nAnd now one can connect running application from separate terminal, with\n``nc`` command, immediately ``aiomonitor`` will respond with prompt::\n\n $ nc localhost 50101\n Asyncio Monitor: 1 tasks running\n Type help for commands\n monitor >>>\n\nNow you can type commands, for instance ``help``::\n\n monitor >>> help\n Commands:\n ps : Show task table\n where taskid : Show stack frames for a task\n cancel taskid : Cancel an indicated task\n signal signame : Send a Unix signal\n stacktrace : Print a stack trace from the event loop thread\n console : Switch to async Python REPL\n quit : Leave the monitor\n\n``aiomonitor`` supports also async python console inside running event loop\nso you can explore state of your application::\n\n monitor >>> console\n Python 3.5.2 (default, Oct 11 2016, 05:05:28)\n [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n ---\n This console is running in an asyncio event loop.\n It allows you to wait for coroutines using the 'await' syntax.\n Try: await asyncio.sleep(1, result=3, loop=loop)\n ---\n >>> await asyncio.sleep(1, result=3, loop=loop)\n\nTo leave console type ``exit()``::\n\n >>> exit()\n monitor >>>\n\n\n``aiomonitor`` is very easy to extend with your own console commands.\n\n.. code:: python\n\n class WebMonitor(aiomonitor.Monitor):\n def do_hello(self, sin, sout, name=None):\n \"\"\"Using the /hello GET interface\n\n There is one optional argument, \"name\". This name argument must be\n provided with proper URL excape codes, like %20 for spaces.\n \"\"\"\n name = '' if name is None else '/' + name\n r = requests.get('http://localhost:8090/hello' + name)\n sout.write(r.text + '\\n')\n\n\nRequirements\n------------\n\n* Python_ 3.5+\n* aioconsole_\n* uvloop_ (optional)\n\n\n.. _PEP492: https://www.python.org/dev/peps/pep-0492/\n.. _Python: https://www.python.org\n.. _aioconsole: https://github.com/vxgmichel/aioconsole\n.. _aiohttp: https://github.com/KeepSafe/aiohttp\n.. _asyncio: http://docs.python.org/3.5/library/asyncio.html\n.. _curio: https://github.com/dabeaz/curio\n.. _uvloop: https://github.com/MagicStack/uvloop\n.. _cmd: http://docs.python.org/3/library/cmd.html\n\nCHANGES\n=======\n\n0.4.4 (2019-03-23)\n------------------\n\n* Simplified python console start end #175\n\n* Added python 3.7 compatibility #176\n\n\n0.4.3 (2019-02-02)\n------------------\n\n* Reworked console server start/close logic #169\n\n\n0.4.2 (2019-01-13)\n------------------\n\n* Fixed issue with type annotations from 0.4.1 release #164\n\n\n0.4.1 (2019-01-10)\n------------------\n\n* Fixed Python 3.5 support #161 (thanks @bmerry)\n\n\n0.4.0 (2019-01-04)\n------------------\n\n* Added support for custom commands #133 (thanks @yggdr)\n\n* Fixed OptLocals being passed as the default value for \"locals\" #122 (thanks @agronholm)\n\n* Added an API inspired by the standard library's cmd module #135 (thanks @yggdr)\n\n* Correctly report the port running aioconsole #124 (thanks @bmerry)\n\n\n0.3.1 (2018-07-03)\n------------------\n\n* Added the stacktrace command #120 (thanks @agronholm)\n\n\n0.3.0 (2017-09-08)\n------------------\n\n* Added _locals_ parameter for passing environment to python REPL\n\n\n0.2.1 (2016-01-03)\n------------------\n\n* Fixed import in telnet cli in #12 (thanks @hellysmile)\n\n\n0.2.0 (2016-01-01)\n------------------\n\n* Added basic documentation\n\n* Most of methods of Monitor class are not not private api\n\n\n0.1.0 (2016-12-14)\n------------------\n\n* Added missed LICENSE file\n\n* Updated API, added start_monitor() function\n\n\n0.0.3 (2016-12-11)\n------------------\n\n* Fixed README.rst\n\n\n0.0.2 (2016-12-11)\n------------------\n\n* Tests more stable now\n\n* Added simple tutorial to README.rst\n\n\n0.0.1 (2016-12-10)\n------------------\n\n* Initial release.\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/aiomonitor", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/aio-libs/aiomonitor", "keywords": "", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "aiomonitor", "package_url": "https://pypi.org/project/aiomonitor/", "platform": "POSIX", "project_url": "https://pypi.org/project/aiomonitor/", "project_urls": { "Download": "https://pypi.python.org/pypi/aiomonitor", "Homepage": "https://github.com/aio-libs/aiomonitor" }, "release_url": "https://pypi.org/project/aiomonitor/0.4.4/", "requires_dist": [ "terminaltables", "aioconsole" ], "requires_python": "", "summary": "aiomonitor adds monitor and python REPL capabilities for asyncio application", "version": "0.4.4" }, "last_serial": 4976434, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "509530e2c6804e30b7c2ca227e4d6236", "sha256": "102669079dd672d983238ef0ef3da2d19d545012eaa23991bbf8131227cf8720" }, "downloads": -1, "filename": "aiomonitor-0.0.1.tar.gz", "has_sig": false, "md5_digest": "509530e2c6804e30b7c2ca227e4d6236", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5994, "upload_time": "2016-12-09T23:07:00", "url": "https://files.pythonhosted.org/packages/f9/e5/fed2dc5ac31ca0c6f5a829e6acd223485912b11470c1cf9c4c2420d78dc4/aiomonitor-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "02ec5eecf5991c60d5b37ab31950cf06", "sha256": "1a25fed9d744e330d7f6134b35dc5cb3155efdc13b6306910cd3b3f9a3411fc5" }, "downloads": -1, "filename": "aiomonitor-0.0.2.tar.gz", "has_sig": false, "md5_digest": "02ec5eecf5991c60d5b37ab31950cf06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6677, "upload_time": "2016-12-10T22:36:45", "url": "https://files.pythonhosted.org/packages/87/2f/b8f017e427a27552c142ba360a95b1ad0544221c6ac91c7f2b1bbc8cdabe/aiomonitor-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "71e29bbc8f5882742bb4f0d75e79bdba", "sha256": "08666b59849c640e89d47dfdb4ec92542642b1ef5c9f966974600a80fe73add0" }, "downloads": -1, "filename": "aiomonitor-0.0.3.tar.gz", "has_sig": false, "md5_digest": "71e29bbc8f5882742bb4f0d75e79bdba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6681, "upload_time": "2016-12-10T22:54:16", "url": "https://files.pythonhosted.org/packages/f3/63/13c5e05ed981e9a24af75eb4d639d68a478a2a7cdb02ec1a312426ddfb14/aiomonitor-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "3ac415be70e4138f082732543f02debe", "sha256": "658041bcd65d1937665548d9b1f7cd060846c873dce62ed1411989f4510d3dab" }, "downloads": -1, "filename": "aiomonitor-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3ac415be70e4138f082732543f02debe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10990, "upload_time": "2016-12-14T19:57:59", "url": "https://files.pythonhosted.org/packages/fc/cc/871a5c8fd3ae077cad1b3224309875dd975c198e654232e94fa1b5875302/aiomonitor-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "e45951a79de04f7a6949fbefb08ed568", "sha256": "f81db345475f12354b7eb03cf10ec3e311fd0350e8bea718740a7f550aaaca3a" }, "downloads": -1, "filename": "aiomonitor-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e45951a79de04f7a6949fbefb08ed568", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12809, "upload_time": "2017-01-01T20:34:12", "url": "https://files.pythonhosted.org/packages/0d/cd/2c720dde59577688aaf6538f5140488dc2a8f159e90cacad7cae517e7fef/aiomonitor-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "51fc96ddb91c45b19cbefb2ff8a358d4", "sha256": "410b502d9061889f861b138e60cf634cf71f4a5f2b4cd36beb1510e1da0ee36d" }, "downloads": -1, "filename": "aiomonitor-0.2.1.tar.gz", "has_sig": false, "md5_digest": "51fc96ddb91c45b19cbefb2ff8a358d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13090, "upload_time": "2017-01-03T13:54:46", "url": "https://files.pythonhosted.org/packages/6f/c5/436718e519e0a58c38a868afd07b430096f24097c10ab12caca23a6dab08/aiomonitor-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "446319b270c81f1d3839f89858b2fa40", "sha256": "f4f77a8f5de9e636cb1c5c1133fc6239813649a0175112bf7af58ebbf0fe077b" }, "downloads": -1, "filename": "aiomonitor-0.3.0.tar.gz", "has_sig": false, "md5_digest": "446319b270c81f1d3839f89858b2fa40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11609, "upload_time": "2017-09-08T19:38:41", "url": "https://files.pythonhosted.org/packages/9f/7a/f9b021cbf88ff66d1652006146d443cfa63ba8574cbf97d4d6ff4adfa766/aiomonitor-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "449c5868d494e14643441d1a6fcd25ea", "sha256": "1a396ea14a060561731081117dbfe02a9a209000c6152f66b3b3d3e0d0b8e0c3" }, "downloads": -1, "filename": "aiomonitor-0.3.1.tar.gz", "has_sig": false, "md5_digest": "449c5868d494e14643441d1a6fcd25ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14474, "upload_time": "2018-07-03T17:42:40", "url": "https://files.pythonhosted.org/packages/4c/e4/6314fe522d0c17fd01e14297e3ec58d4f4d2cf7bf1089590e1d23bc7653b/aiomonitor-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "0e81e01a92646697fbc0124580d03649", "sha256": "8e8470a80b4380ad2ffa30d9a08fc29fa189176aa46feeb05a366c122a40e0c2" }, "downloads": -1, "filename": "aiomonitor-0.4.0.tar.gz", "has_sig": false, "md5_digest": "0e81e01a92646697fbc0124580d03649", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17038, "upload_time": "2019-01-05T08:21:00", "url": "https://files.pythonhosted.org/packages/a8/d5/995c2be5ddac6ea6251c4d65a75b4875360ec46bc13f23e9860ad0759c4a/aiomonitor-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "29ba62220f0428176bc4e28fafeb3546", "sha256": "73bbd8d803108237c29997d4d756f578ca8c81cf0899bf4d409a21143793578d" }, "downloads": -1, "filename": "aiomonitor-0.4.1.tar.gz", "has_sig": false, "md5_digest": "29ba62220f0428176bc4e28fafeb3546", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16443, "upload_time": "2019-01-10T22:43:37", "url": "https://files.pythonhosted.org/packages/fe/df/3e01a3683c407edfb6659b0ff9bb9745403609f466861bea246a7962ba5b/aiomonitor-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "85d316bdbaa553b5297bdaa8c871a513", "sha256": "b69b395b1962d5bf7e0f4faae3da8a229f15fdc8e6b54e5fd5498503c186ca68" }, "downloads": -1, "filename": "aiomonitor-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "85d316bdbaa553b5297bdaa8c871a513", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15279, "upload_time": "2019-01-12T22:29:28", "url": "https://files.pythonhosted.org/packages/27/a9/c0b57959a695fdaa543a2dcd5895b8bbef66558c75de67d1dd643982ae1d/aiomonitor-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04eff1d4dfe9aaab35778cb595d4537a", "sha256": "968621fd0e4824d04a767349b14637f3d6b606f15534274fcdf0d5cc81249e4a" }, "downloads": -1, "filename": "aiomonitor-0.4.2.tar.gz", "has_sig": false, "md5_digest": "04eff1d4dfe9aaab35778cb595d4537a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16439, "upload_time": "2019-01-12T22:29:30", "url": "https://files.pythonhosted.org/packages/bb/08/0c8a814991a76376db58c8b8a114c2e5d66e9fc46ff93781e624abf47942/aiomonitor-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "53e57710df81ac9f5114788de270b83c", "sha256": "26cc6e74711ea0df68a2d5ddd389751801b939a446046a303d192fc8f1efcadf" }, "downloads": -1, "filename": "aiomonitor-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "53e57710df81ac9f5114788de270b83c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15626, "upload_time": "2019-02-02T10:23:20", "url": "https://files.pythonhosted.org/packages/75/da/510fa802731e83b8b640f9e61e620d61cfa2abb028fa48b2144610bec773/aiomonitor-0.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f58ac68497a59d104ecb6ba369df784", "sha256": "37cd279c26e2c80b4e6ed9d23476c84c0b75fc3794617fceb6f341437b9af5fe" }, "downloads": -1, "filename": "aiomonitor-0.4.3.tar.gz", "has_sig": false, "md5_digest": "0f58ac68497a59d104ecb6ba369df784", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17492, "upload_time": "2019-02-02T10:23:21", "url": "https://files.pythonhosted.org/packages/11/27/2d25a3318e57181e04d2694768f0e1e621b64606d8424076790caa29e401/aiomonitor-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "af83dc624b72d8431d4e78c702ae6b84", "sha256": "92b99f3395a441870350cd956c63eb95cf57fa1bdd8ffcd8826cf01fe8e617cb" }, "downloads": -1, "filename": "aiomonitor-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "af83dc624b72d8431d4e78c702ae6b84", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15668, "upload_time": "2019-03-23T19:41:57", "url": "https://files.pythonhosted.org/packages/fd/e2/600e9847c6eea8ea59fcc9f8a6f9ca3d7e1d9a0e73f1605113cb9b53fccb/aiomonitor-0.4.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38028c80adf5708ad5f7adadf0fdf404", "sha256": "c3e0d79cb637baa06ce50db8070e8db0798e16ea626606b703d9d0e3ca5b30ff" }, "downloads": -1, "filename": "aiomonitor-0.4.4.tar.gz", "has_sig": false, "md5_digest": "38028c80adf5708ad5f7adadf0fdf404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17594, "upload_time": "2019-03-23T19:43:58", "url": "https://files.pythonhosted.org/packages/fe/15/ac345a2a55ef106b466347c58ebc5f77ef491aea5a05f700e80a181cda47/aiomonitor-0.4.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "af83dc624b72d8431d4e78c702ae6b84", "sha256": "92b99f3395a441870350cd956c63eb95cf57fa1bdd8ffcd8826cf01fe8e617cb" }, "downloads": -1, "filename": "aiomonitor-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "af83dc624b72d8431d4e78c702ae6b84", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15668, "upload_time": "2019-03-23T19:41:57", "url": "https://files.pythonhosted.org/packages/fd/e2/600e9847c6eea8ea59fcc9f8a6f9ca3d7e1d9a0e73f1605113cb9b53fccb/aiomonitor-0.4.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38028c80adf5708ad5f7adadf0fdf404", "sha256": "c3e0d79cb637baa06ce50db8070e8db0798e16ea626606b703d9d0e3ca5b30ff" }, "downloads": -1, "filename": "aiomonitor-0.4.4.tar.gz", "has_sig": false, "md5_digest": "38028c80adf5708ad5f7adadf0fdf404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17594, "upload_time": "2019-03-23T19:43:58", "url": "https://files.pythonhosted.org/packages/fe/15/ac345a2a55ef106b466347c58ebc5f77ef491aea5a05f700e80a181cda47/aiomonitor-0.4.4.tar.gz" } ] }