Package: aiomonitor-ng
aiomonitor-ngaiomonitor-ngis a (temporary) fork ofaiomonitorwith support for
Python 3.10+ and additional usability & debuggability improvements.aiomonitoris a module that adds monitor and cli capabilities
forasyncioapplications. Idea and code were borrowed fromcurioproject.
Task monitor that runs concurrently to theasyncioloop (or fast drop-in
replacementuvloop) in a separate thread as result monitor will work even if
the event loop is blocked for some reason.This library provides a python console usingaioconsolemodule. It is possible
to execute asynchronous commands inside your running application. Extensible
with you own commands, in the style of the standard library’scmdmoduleInstallationInstallation process is simple, just:$ pip install aiomonitor-ngExampleMonitor has context manager interface:importaiomonitorasyncdefmain():loop=asyncio.get_running_loop()run_forever=loop.create_future()withaiomonitor.start_monitor(loop):awaitrun_forevertry:asyncio.run(main())exceptKeyboardInterrupt:passNow from separate terminal it is possible to connect to the application:$ telnet localhost 50101or the included python client:$ python -m aiomonitor.cliTutorialLet’s create a simpleaiohttpapplication, and see howaiomonitorcan
be integrated with it.importasyncioimportaiomonitorfromaiohttpimportweb# Simple handler that returns response after 100sasyncdefsimple(request):loop=request.app.loopprint('Start sleeping')awaitasyncio.sleep(100,loop=loop)returnweb.Response(text="Simple answer")loop=asyncio.get_event_loop()# create application and register routeapp=web.Application(loop=loop)app.router.add_get('/simple',simple)# it is possible to pass a dictionary with local variables# to the python console environmenthost,port="localhost",8090locals_={"port":port,"host":host}# init monitor just before run_appwithaiomonitor.start_monitor(loop=loop,locals=locals_):# run application with built-in aiohttp run_app functionweb.run_app(app,port=port,host=host)Let’s save this code in filesimple_srv.py, so we can run it with the following command:$ python simple_srv.py
======== Running on http://localhost:8090 ========
(Press CTRL+C to quit)And now one can connect to a running application from a separate terminal, with
thetelnetcommand, andaiomonitorwill immediately respond with prompt:$ telnet localhost 50101
Asyncio Monitor: 1 tasks running
Type help for commands
monitor >>>Now you can type commands, for instance,help:monitor >>> help
Usage: help [OPTIONS] COMMAND [ARGS]...

  To see the usage of each command, run them with "--help" option.

Commands:
  cancel                  Cancel an indicated task
  console                 Switch to async Python REPL
  exit (q,quit)           Leave the monitor client session
  help (?,h)              Show the list of commands
  ps (p)                  Show task table
  ps-terminated (pst,pt)  List recently terminated/cancelled tasks
  signal                  Send a Unix signal
  stacktrace (st,stack)   Print a stack trace from the event loop thread
  where (w)               Show stack frames and the task creation chain of a task
  where-terminated (wt)   Show stack frames and the termination/cancellation chain of a taskaiomonitoralso supports async python console inside a running event loop
so you can explore the state of your application:monitor >>> console
Python 3.10.7 (main, Sep  9 2022, 12:31:20) [Clang 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
---
This console is running in an asyncio event loop.
It allows you to wait for coroutines using the 'await' syntax.
Try: await asyncio.sleep(1, result=3)
---
>>> await asyncio.sleep(1, result=3)
3
>>>To leave the console typeexit()or press Ctrl+D:>>> exit()

✓ The console session is closed.
monitor >>>ExtensionAdditional console variablesYou may add more variables that can be directly referenced in theconsolecommand.
Referthe console-variables example codeCustom console commandsaiomonitoris very easy to extend with your own console commands.
Referthe extension example codeRequirementsPython3.8+ (3.10.7+ recommended)aioconsoleClickprompt_toolkituvloop(optional)CHANGES0.7.1 (2023-04-16)Support Python 3.11 properly by allowing the optionalnameandcontextkwargs passed toasyncio.create_task()in the hooked task factory function (#10)Update development dependencies0.7.0 (2022-10-19)Selective persistent termination logs (#9)Implement cancellation chain tracker (#8)Trigger auto-completion only when Tab is pressedSupport auto-completion of commands and arguments (#7)Add missing explicit dependency to Click0.6.0 (2022-09-26)Promoteconsole_localsas public attrReimplement console command (#6)Migrate to Click-based command line interface (#5)Adoptprompt_toolkitand support concurrent clients (#4)Show the total number of tasks when executingps(#3)Apply black, isort, mypy, flake8 and automate CI workflows using GitHub Actions0.5.1 (2022-08-29)Fix the task creation location in the ‘ps’ command output0.5.0 (2022-08-26)Made it compatible with Python 3.10Added the task creation stack chain display to the ‘where’ command by setting a custom task factory (#1)Changed the ‘ps’ command view to be more concise and display many tasks in a better way (#2)0.4.5 (2019-11-03)Fixed endless loop on EOF (thanks @apatrushev)0.4.4 (2019-03-23)Simplified python console start end #175Added python 3.7 compatibility #1760.4.3 (2019-02-02)Reworked console server start/close logic #1690.4.2 (2019-01-13)Fixed issue with type annotations from 0.4.1 release #1640.4.1 (2019-01-10)Fixed Python 3.5 support #161 (thanks @bmerry)0.4.0 (2019-01-04)Added support for custom commands #133 (thanks @yggdr)Fixed OptLocals being passed as the default value for “locals” #122 (thanks @agronholm)Added an API inspired by the standard library’s cmd module #135 (thanks @yggdr)Correctly report the port running aioconsole #124 (thanks @bmerry)0.3.1 (2018-07-03)Added the stacktrace command #120 (thanks @agronholm)0.3.0 (2017-09-08)Added _locals_ parameter for passing environment to python REPL0.2.1 (2016-01-03)Fixed import in telnet cli in #12 (thanks @hellysmile)0.2.0 (2016-01-01)Added basic documentationMost of methods of Monitor class are not not private api0.1.0 (2016-12-14)Added missed LICENSE fileUpdated API, added start_monitor() function0.0.3 (2016-12-11)Fixed README.rst0.0.2 (2016-12-11)Tests more stable nowAdded simple tutorial to README.rst0.0.1 (2016-12-10)Initial release.