Browse Source

backport to panoramisk==1.0 + refactoring

boyska 2 years ago
parent
commit
36cff1c634
4 changed files with 96 additions and 55 deletions
  1. 48 0
      asterisk_misc_common.py
  2. 9 20
      ring_mon/ring.py
  3. 12 17
      transfer_back/mixer.py
  4. 27 18
      transfer_back/transfer_back.py

+ 48 - 0
asterisk_misc_common.py

@@ -0,0 +1,48 @@
+import asyncio
+import logging
+
+from panoramisk import Manager
+
+LOOP = asyncio.get_event_loop()
+
+
+def add_arguments(p):
+    p.add_argument(
+        "--log-level",
+        default="INFO",
+        choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
+    )
+    return p
+
+
+def do_common_options(args):
+    logging.basicConfig(level=logging.DEBUG)
+    logging.getLogger("panoramisk.manager").setLevel(logging.WARNING)
+
+
+def get_manager(args):
+    manager = Manager(
+        loop=LOOP,
+        host="127.0.0.1",
+        port=5038,
+        ssl=False,
+        encoding="utf8",
+        username="ring",
+        secret="campanellino",
+        ping_delay=10,  # Delay after start
+        ping_interval=10,  # Periodically ping AMI (dead or alive)
+        reconnect_timeout=2,  # Timeout reconnect if connection lost
+    )
+    return manager
+
+
+def run_manager(manager, args, on_startup=None, on_shutdown=None):
+    manager.connect()
+    try:
+        if on_startup:
+            manager.loop.run_until_complete(on_startup(manager))
+        manager.loop.run_forever()
+    except KeyboardInterrupt:
+        if on_shutdown:
+            manager.loop.run_until_complete(on_shutdown(manager))
+        manager.loop.close()

+ 9 - 20
ring_mon/ring.py

@@ -1,18 +1,17 @@
 #!/usr/bin/env python3
 
-import asyncio
 import json
 import logging
 import tempfile
 from argparse import ArgumentParser
 from pathlib import Path
 
-from panoramisk import Manager
 from panoramisk.actions import Action
 
+import asterisk_misc_common
+
 log = logging.getLogger("ring")
 
-LOOP = asyncio.get_event_loop()
 STATEFILE = None
 
 
@@ -89,8 +88,6 @@ def refresh(manager, *args):
 
 
 async def init(manager):
-    # manager.send_command('sip show peers')
-
     manager.register_event("*", on_tutto)
     for event in [
         "FullyBooted",
@@ -107,31 +104,23 @@ async def init(manager):
 
 
 async def on_shutdown(m):
-    pass
+    print("Shutting down...")
 
 
 def main():
     global STATEFILE
     p = ArgumentParser()
     p.add_argument("--state-file", type=Path, default=Path("./ring-state.json"))
+
+    asterisk_misc_common.add_arguments(p)
     args = p.parse_args()
+    asterisk_misc_common.do_common_options(args)
     STATEFILE = args.state_file
 
-    logging.basicConfig(level=logging.DEBUG)
-    logging.getLogger("panoramisk.manager").setLevel(logging.WARNING)
-    manager = Manager(
-        loop=LOOP,
-        host="127.0.0.1",
-        port=5038,
-        ssl=False,
-        encoding="utf8",
-        username="ring",
-        secret="campanellino",
-        ping_delay=10,  # Delay after start
-        ping_interval=10,  # Periodically ping AMI (dead or alive)
-        reconnect_timeout=2,  # Timeout reconnect if connection lost
+    manager = asterisk_misc_common.get_manager(args)
+    asterisk_misc_common.run_manager(
+        manager, args, on_startup=init, on_shutdown=on_shutdown
     )
-    manager.connect(run_forever=True, on_startup=init, on_shutdown=on_shutdown)
 
 
 if __name__ == "__main__":

+ 12 - 17
transfer_back/mixer.py

@@ -14,13 +14,13 @@ speaker.
 """
 
 
-import asyncio
 import logging
+from argparse import ArgumentParser
 
-from panoramisk import Manager
 from panoramisk.actions import Action
 
-LOOP = asyncio.get_event_loop()
+import asterisk_misc_common
+
 CONFERENCE = "400"
 APP = None
 
@@ -175,21 +175,16 @@ async def on_shutdown(m):
 
 
 def main():
-    logging.basicConfig(level=logging.DEBUG)
-    logging.getLogger("panoramisk.manager").setLevel(logging.WARNING)
-    manager = Manager(
-        loop=LOOP,
-        host="127.0.0.1",
-        port=5038,
-        ssl=False,
-        encoding="utf8",
-        username="admin",
-        secret="secret123password",
-        ping_delay=10,  # Delay after start
-        ping_interval=10,  # Periodically ping AMI (dead or alive)
-        reconnect_timeout=2,  # Timeout reconnect if connection lost
+    p = ArgumentParser()
+
+    asterisk_misc_common.add_arguments(p)
+    args = p.parse_args()
+    asterisk_misc_common.do_common_options(args)
+
+    manager = asterisk_misc_common.get_manager(args)
+    asterisk_misc_common.run_manager(
+        manager, args, on_startup=init, on_shutdown=on_shutdown
     )
-    manager.connect(run_forever=True, on_startup=init, on_shutdown=on_shutdown)
 
 
 if __name__ == "__main__":

+ 27 - 18
transfer_back/transfer_back.py

@@ -1,14 +1,12 @@
 #!/usr/bin/env python3
 
-
-import asyncio
 import logging
 import urllib.parse
+from argparse import ArgumentParser
 
-from panoramisk import Manager
 from panoramisk.actions import Action
 
-LOOP = asyncio.get_event_loop()
+import asterisk_misc_common
 
 log = logging.getLogger("transferback")
 
@@ -105,12 +103,28 @@ class TransferAndTakeBack(BaseApp):
 
     # meant to be overridden by children {{{
     def get_destination(self):
+        """
+        la destination e' tipicamente una confbridge in cui l'utente remoto
+        incontra lo speaker
+        """
         return "private,9438,1"
 
     def get_backroom(self):
+        """
+        nella backroom, l'utente locale si incontra nuovamente con l'utente
+        remoto
+        """
         return "private,9401,1"
 
     def get_waiting_room(self):
+        """
+        nella waiting room, l'utente locale sente musica d'attesa mentre aspetta
+        che una di queste due cose avvenga:
+             - l'utente remoto riaggancia
+             - l'utente locale riaggancia
+             - l'utente locale preme #
+        """
+
         return "private,9401,1"
 
     def is_context_auth(self, context):
@@ -246,21 +260,16 @@ async def on_shutdown(m):
 
 
 def main():
-    logging.basicConfig(level=logging.DEBUG)
-    logging.getLogger("panoramisk.manager").setLevel(logging.WARNING)
-    manager = Manager(
-        loop=LOOP,
-        host="127.0.0.1",
-        port=5038,
-        ssl=False,
-        encoding="utf8",
-        username="admin",
-        secret="secret123password",
-        ping_delay=10,  # Delay after start
-        ping_interval=10,  # Periodically ping AMI (dead or alive)
-        reconnect_timeout=2,  # Timeout reconnect if connection lost
+    p = ArgumentParser()
+
+    asterisk_misc_common.add_arguments(p)
+    args = p.parse_args()
+    asterisk_misc_common.do_common_options(args)
+
+    manager = asterisk_misc_common.get_manager(args)
+    asterisk_misc_common.run_manager(
+        manager, args, on_startup=init, on_shutdown=on_shutdown
     )
-    manager.connect(run_forever=True, on_startup=init, on_shutdown=on_shutdown)
 
 
 if __name__ == "__main__":