Browse Source

Merge branch 'update_message_handler' of blezz-tech/sharix-open-webservice-running into unstable

+ 0 - 0
handlers/gen-passwords.py → handlers/bin/gen-passwords.py


+ 0 - 0
handlers/gen_users.sh → handlers/bin/gen_users.sh


+ 0 - 0
handlers/gen_web_users.py → handlers/bin/gen_web_users.py


+ 0 - 0
handlers/utils/JabberBot.py → handlers/core/JabberBot.py


+ 0 - 0
handlers/utils/SystemdKiller.py → handlers/core/SystemdKiller.py


+ 0 - 0
handlers/lib.py → handlers/core/lib.py


+ 12 - 0
handlers/core/utils.py

@@ -0,0 +1,12 @@
+from classes.Ticket import Ticket
+from typing import List
+
+def get_init_data(status: int) -> List[Ticket]:
+    return [
+        Ticket(0, "t", 0,0,0,0,0,0,0,0,0,"note", 1),
+        Ticket(1, "t", 0,1,0,0,0,0,0,0,0,"note", 2),
+        Ticket(2, "t", 0,2,0,0,0,0,0,0,0,"note", 1),
+        Ticket(3, "t", 0,3,0,0,0,0,0,0,0,"note", 2),
+        Ticket(4, "t", 0,4,0,0,0,0,0,0,0,"note", 1),
+        Ticket(5, "t", 0,5,0,0,0,0,0,0,0,"note", 1),
+    ]

+ 38 - 17
handlers/handlers/open_access_request_pending.py

@@ -2,15 +2,16 @@ import hashlib
 from datetime import datetime
 import config
 import logging
-from utils.JabberBot import JabberBot
+from core.JabberBot import JabberBot
 from slixmpp.stanza import Message
 import jsonAndRequest as jsreq
 from time import sleep
-from lib import run_process
+from core.lib import run_process
 from classes.Ticket import Ticket
 from typing import List
 from concurrent.futures import ThreadPoolExecutor
-from utils.SystemdKiller import SystemdKiller
+from core.SystemdKiller import SystemdKiller
+from core.utils import get_init_data
 
 botname = "open_access_request_pending"
 operating_status = 320
@@ -38,6 +39,9 @@ INTERVAL_ATTEMPTS = 3
 # INTERVAL_TIME = 30 * 60  # 30 минут в секундах
 INTERVAL_TIME = 5 # Для проверки
 
+TEMP_TICKETS: List[Ticket] = []
+ID_TICKETS_FOR_REMOVE: List[int] = []
+
 def message_handler(msg: Message):
     """Обработчик входящих сообщений"""
 
@@ -45,21 +49,39 @@ def message_handler(msg: Message):
         text = msg['body']  # текст сообщения боту
         sender = msg['from']  # отправитель сообщения
 
-        if (str(sender).split("/")[0]) in listen_to:
+        sender_name = str(sender).split("/")[0]
+        if sender_name in listen_to:
             if text is not None:
                 logging.info(f"Сообщение получено")
 
+                # match ACTION:
+                #     case "add_ticket":
+                #         match sender_name:
+                #             case "open_*_request_*":
+                #                 TEMP_TICKETS.append(ticket)
+                #     case "remove_ticket":
+                #         ID_TICKETS_FOR_REMOVE.append(id)
+
+
 def start_handler():
     """Событие запуска обработчика."""
 
     logging.info(">>>>>  %s  |---| %s  <<<<<", JID, PASSWORD)
 
-    tickets: List[Ticket]  = get_fake_data()
+    tickets: List[Ticket] = get_init_data(operating_status)
 
     with ThreadPoolExecutor() as executor:
         killer = SystemdKiller()
 
         while not killer.exit_event.is_set():
+            # Получение тикетов от других обработчиков
+            tickets += TEMP_TICKETS
+            TEMP_TICKETS.clear()
+
+            # Фильтрация тикетов от лишних id
+            tickets = [ticket for ticket in tickets if ticket.id not in ID_TICKETS_FOR_REMOVE]
+            ID_TICKETS_FOR_REMOVE.clear()
+
             # Параллельная обработка всех тикетов
             processed = list(executor.map(run_process(interval_attempts_unlimited, processing), tickets))
             
@@ -73,7 +95,7 @@ def start_handler():
 
 # START CUSTOM FUNCTIONS
 
-def interval_attempts_unlimited(ticket):
+def interval_attempts_unlimited(ticket: Ticket) -> None:
     logging.debug(f"Лимит попыток обработки тикета {ticket.id} исчерпан")
     
     # db.changestatus
@@ -86,23 +108,22 @@ def interval_attempts_unlimited(ticket):
     # }
 
 
-def processing(ticket):
+def processing(ticket: Ticket) -> None:
     logging.debug(f"Начало обработки тикета {ticket.id}")
 
-    # Do something
+    message = f"Тикет {ticket.id} ожидает решения"
+
+    send_notification_to_admins(ticket, message)
+    bot.send_message(ticket.assigned_to, message)
 
     logging.debug(f"Конец обработки тикета {ticket.id}")
 
 
-def get_fake_data() -> List[Ticket]:
-    return [
-        Ticket(0, "t", 0,0,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS - 2),
-        Ticket(1, "t", 0,1,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS + 1),
-        Ticket(2, "t", 0,2,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS - 1),
-        Ticket(3, "t", 0,3,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS + 2),
-        Ticket(4, "t", 0,4,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS + 1),
-        Ticket(5, "t", 0,5,0,0,0,0,0,0,0,"note",INTERVAL_ATTEMPTS - 1),
-    ]
+def send_notification_to_admins(ticket: Ticket, admins: List[str], message: str) -> None:
+    """Отправка уведомления администратору о новом тикете."""
+    for admin in admins:
+        bot.send_message(admin, message)
+    logging.info(f"Уведомление отправлено администраторам: {ticket.id}")
 
 # def get_token():
 #     return jsreq.requestGetToken(botname, PASSWORD, config.API_URL + "/auth/token/login/")

+ 1 - 1
handlers/handlers/open_basic_bot.py

@@ -2,7 +2,7 @@ import hashlib
 from datetime import datetime
 import config
 import logging
-from utils.JabberBot import JabberBot
+from core.JabberBot import JabberBot
 from slixmpp.stanza import Message
 
 botname = "open_basic_bot"

+ 1 - 1
handlers/main.py

@@ -1,5 +1,5 @@
 import config
-from utils.JabberBot import JabberBot
+from core.JabberBot import JabberBot
 import logging
 from argparse import ArgumentParser
 import importlib