asterisk_misc_common.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import asyncio
  2. import logging
  3. import pathlib
  4. from typing import Tuple
  5. from panoramisk import Manager
  6. LOOP = asyncio.get_event_loop()
  7. def add_arguments(p):
  8. p.add_argument(
  9. "--log-level",
  10. default="INFO",
  11. choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
  12. )
  13. p.add_argument("--credentials", type=pathlib.Path, required=True)
  14. return p
  15. def do_common_options(args):
  16. logging.basicConfig(level=args.log_level)
  17. logging.getLogger("panoramisk.manager").setLevel(logging.WARNING)
  18. def read_credentials(fpath) -> Tuple[str, str]:
  19. with fpath.open() as buf:
  20. username = buf.readline().rstrip("\n\r")
  21. password = buf.readline().rstrip("\n\r")
  22. return username, password
  23. def get_manager(args):
  24. username, password = read_credentials(args.credentials)
  25. manager = Manager(
  26. loop=LOOP,
  27. host="127.0.0.1",
  28. port=5038,
  29. ssl=False,
  30. encoding="utf8",
  31. username=username,
  32. secret=password,
  33. ping_delay=10, # Delay after start
  34. ping_interval=10, # Periodically ping AMI (dead or alive)
  35. reconnect_timeout=2, # Timeout reconnect if connection lost
  36. )
  37. return manager
  38. def run_manager(manager, args, on_startup=None, on_shutdown=None):
  39. manager.connect()
  40. try:
  41. if on_startup:
  42. manager.loop.run_until_complete(on_startup(manager))
  43. manager.loop.run_forever()
  44. except KeyboardInterrupt:
  45. if on_shutdown:
  46. manager.loop.run_until_complete(on_shutdown(manager))
  47. manager.loop.close()