浏览代码

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

共有 48 个文件被更改,包括 283 次插入97 次删除
  1. 25 0
      handlers/.env.example
  2. 2 1
      handlers/.gitignore
  3. 13 0
      handlers/BotClass.py
  4. 8 0
      handlers/bin/test/test.py
  5. 15 4
      handlers/classes/Ticket.py
  6. 0 38
      handlers/classes/Ticket_user.py
  7. 51 6
      handlers/conf/bin/install.sh
  8. 2 1
      handlers/conf/open_handler@.service
  9. 34 1
      handlers/config.py
  10. 25 0
      handlers/core/data_parsers.py
  11. 40 0
      handlers/core/requesters.py
  12. 0 12
      handlers/core/utils.py
  13. 1 1
      handlers/depr/handlers/old_st_request_assigned.py
  14. 1 1
      handlers/depr/handlers/old_st_request_done.py
  15. 1 1
      handlers/depr/handlers/old_st_request_new.py
  16. 1 1
      handlers/depr/handlers/old_st_request_wontfix.py
  17. 0 0
      handlers/depr/handlers/open_access_request_accepted.py
  18. 0 0
      handlers/depr/handlers/open_access_request_pending.py
  19. 0 0
      handlers/depr/handlers/open_basic_bot.py
  20. 0 0
      handlers/depr/handlers/open_neg_request_accepted.py
  21. 0 0
      handlers/depr/handlers/open_neg_request_pending.py
  22. 0 0
      handlers/depr/handlers/open_service_request_accepted.py
  23. 0 0
      handlers/depr/handlers/open_service_request_assigned.py
  24. 0 0
      handlers/depr/handlers/open_service_request_booked.py
  25. 0 0
      handlers/depr/handlers/open_service_request_booked_v2.py
  26. 0 0
      handlers/depr/handlers/open_service_request_closed.py
  27. 0 0
      handlers/depr/handlers/open_service_request_declined.py
  28. 0 0
      handlers/depr/handlers/open_service_request_done.py
  29. 0 0
      handlers/depr/handlers/open_service_request_forcemajeure.py
  30. 0 0
      handlers/depr/handlers/open_service_request_pending.py
  31. 0 0
      handlers/depr/handlers/open_service_request_preforcemajeure.py
  32. 0 0
      handlers/depr/handlers/open_service_request_prestart.py
  33. 0 0
      handlers/depr/handlers/open_service_request_process.py
  34. 0 0
      handlers/depr/handlers/open_st_request_assigned.py
  35. 0 0
      handlers/depr/handlers/open_st_request_done.py
  36. 0 0
      handlers/depr/handlers/open_st_request_dublicate.py
  37. 0 0
      handlers/depr/handlers/open_st_request_in_process.py
  38. 0 0
      handlers/depr/handlers/open_st_request_new.py
  39. 0 0
      handlers/depr/handlers/open_st_request_reopened.py
  40. 0 0
      handlers/depr/handlers/open_st_request_wontfix.py
  41. 0 0
      handlers/depr/handlers/open_student_handler.py
  42. 0 0
      handlers/depr/handlers/open_template_bot.py
  43. 1 1
      handlers/depr/handlers/st_request_in_process.py
  44. 29 9
      handlers/handlers/open_access_request_pending.py
  45. 3 19
      handlers/jsonAndRequest.py
  46. 2 0
      handlers/requirements.txt
  47. 1 1
      handlers/status_changer.py
  48. 28 0
      lib/seed.py

+ 25 - 0
handlers/.env.example

@@ -0,0 +1,25 @@
+open_basic_bot_key=
+status_changer_key=
+open_access_request_accepted_key=
+open_access_request_pending_key=
+open_neg_request_accepted_key=
+open_neg_request_pending_key=
+open_service_request_accepted_key=
+open_service_request_assigned_key=
+open_service_request_booked_key=
+open_service_request_booked_v2_key=
+open_service_request_closed_key=
+open_service_request_declined_key=
+open_service_request_done_key=
+open_service_request_forcemajeure_key=
+open_service_request_pending_key=
+open_service_request_preforcemajeure_key=
+open_service_request_prestart_key=
+open_service_request_process_key=
+open_st_request_assigned_key=
+open_st_request_done_key=
+open_st_request_dublicate_key=
+open_st_request_in_process_key=
+open_st_request_new_key=
+open_st_request_reopened_key=
+open_st_request_wontfix_key=

+ 2 - 1
handlers/.gitignore

@@ -3,4 +3,5 @@ env/
 config.py
 config.py
 *bottickets.log
 *bottickets.log
 *.log
 *.log
-*~
+*~
+.env

+ 13 - 0
handlers/BotClass.py

@@ -13,6 +13,8 @@ class JabberBot:
         self.user, self.server, self.password, self.port = jid.getNode(), jid.getDomain(), password, port
         self.user, self.server, self.password, self.port = jid.getNode(), jid.getDomain(), password, port
         self.connect()
         self.connect()
         self.auth()
         self.auth()
+        # TODO: Добавить поля
+        #         botname
 
 
     # Метод проверки подключения к серверу xmpp
     # Метод проверки подключения к серверу xmpp
     def connect(self):
     def connect(self):
@@ -42,6 +44,17 @@ class JabberBot:
             return 0
             return 0
         return 1
         return 1
 
 
+    # TODO: Рефакторинг логов после добавления полей в JabbrBot
+    # def bot_log(self, message):
+    #     self.bot_basic_log(self.botname + " " + str(datetime.now()) + " " + "Заказ ожидает пользовательской реакции\n")
+
+    # def bot_basic_log(self, message):
+    #     # надо строчку лога сделать более информативной
+    #     logfile = open("logs/" + datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
+    #     logfile.write(message)
+    #     logfile.close()
+    #     print(message)
+
     def bot_log(self, message):
     def bot_log(self, message):
         # надо строчку лога сделать более информативной
         # надо строчку лога сделать более информативной
         logfile = open("logs/" + datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
         logfile = open("logs/" + datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")

+ 8 - 0
handlers/bin/test/test.py

@@ -0,0 +1,8 @@
+from core.requesters import TicketRequester
+from config import KEYS
+from pprint import pprint
+
+
+ticket_requester = TicketRequester(KEYS.OPEN_ACCESS_REQUEST_PENDING)
+
+pprint(ticket_requester.all({"status": 111}))

+ 15 - 4
handlers/classes/Ticket.py

@@ -1,5 +1,5 @@
 from datetime import datetime
 from datetime import datetime
-from config import DEFAULT_INTERVAL_ATTEMPTS
+from config import DEFAULT_INTERVAL_ATTEMPTS, DEFAULT_ASSIGNED_TO_ATTEMPTS
 
 
 class Ticket(object):
 class Ticket(object):
     def __init__(
     def __init__(
@@ -16,8 +16,11 @@ class Ticket(object):
             created_by,
             created_by,
             assigned_to=None,
             assigned_to=None,
             note=None,
             note=None,
+            json=None,
+            available_statuses=None,
 
 
-            interval_attempts: int = DEFAULT_INTERVAL_ATTEMPTS
+            interval_attempts: int = DEFAULT_INTERVAL_ATTEMPTS,
+            assigned_to_attempts: int = DEFAULT_ASSIGNED_TO_ATTEMPTS
     ):
     ):
         self.id = id
         self.id = id
         self.status = status
         self.status = status
@@ -31,8 +34,11 @@ class Ticket(object):
         self.created_by = created_by
         self.created_by = created_by
         self.assigned_to = assigned_to
         self.assigned_to = assigned_to
         self.note = note
         self.note = note
+        self.json = json
+        self.available_statuses = available_statuses
 
 
         self.interval_attempts = interval_attempts
         self.interval_attempts = interval_attempts
+        self.assigned_to_attempts = assigned_to_attempts
 
 
     def __str__(self):
     def __str__(self):
         return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}".format(
         return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}".format(
@@ -46,7 +52,10 @@ class Ticket(object):
             self.due_date,
             self.due_date,
             self.priority,
             self.priority,
             self.created_by,
             self.created_by,
-            self.assigned_to
+            self.assigned_to,
+            self.note,
+            self.json,
+            self.available_statuses
         )
         )
 
 
     def to_dict(self):
     def to_dict(self):
@@ -63,7 +72,9 @@ class Ticket(object):
             "priority": self.priority,
             "priority": self.priority,
             "created_by": self.created_by,
             "created_by": self.created_by,
             "assigned_to": self.assigned_to,
             "assigned_to": self.assigned_to,
-            "note": self.note
+            "note": self.note,
+            "json": self.json,
+            "available_statuses": self.available_statuses
         }
         }
 
 
     def update_status(self, new_status):
     def update_status(self, new_status):

+ 0 - 38
handlers/classes/Ticket_user.py

@@ -1,38 +0,0 @@
-class Ticket_user(object):
-    def __init__(
-            self,
-            id,
-            status,
-            title,
-            ticket_type,
-            created_at,
-            updated_at,
-            due_date,
-            priority,
-            created_by,
-            assigned_to
-    ):
-        self.id = id
-        self.status = status
-        self.title = title
-        self.ticket_type = ticket_type
-        self.created_at = created_at
-        self.updated_at = updated_at
-        self.due_date = due_date
-        self.priority = priority
-        self.created_by = created_by
-        self.assigned_to = assigned_to
-
-    def __str__(self):
-        return "{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}\n".format(
-            self.id,
-            self.status,
-            self.title,
-            self.ticket_type,
-            self.created_at,
-            self.updated_at,
-            self.due_date,
-            self.priority,
-            self.created_by,
-            self.assigned_to
-        )

+ 51 - 6
handlers/conf/bin/install.sh

@@ -1,11 +1,56 @@
 
 
-mkdir -p /etc/systemd/system/service-monitor
+echo "Copying open_handler@.service to /etc/systemd/system/"
+\cp webservice_running/handlers/conf/open_handler@.service /etc/systemd/system/
 
 
-cp -r ./conf/service-monitor /etc/systemd/system/service-monitor
+systemctl enable open_handler@1.service
 
 
-cp ./conf/bin/service-failure-check.sh /usr/local/bin
-cp ./conf/bin/service-watcher.sh /usr/local/bin
+echo "Reloading daemon"
+systemctl daemon-reload
 
 
 
 
-chmod +x /usr/local/bin/service-failure-check.sh
-chmod +x /usr/local/bin/service-watcher.sh
+services=(
+  open_basic_bot
+  status_changer
+  open_access_request_accepted
+  open_access_request_pending
+  open_neg_request_accepted
+  open_neg_request_pending
+  open_service_request_accepted
+  open_service_request_assigned
+  open_service_request_booked
+  open_service_request_booked_v2
+  open_service_request_closed
+  open_service_request_declined
+  open_service_request_done
+  open_service_request_forcemajeure
+  open_service_request_pending
+  open_service_request_preforcemajeure
+  open_service_request_prestart
+  open_service_request_process
+  open_st_request_assigned
+  open_st_request_done
+  open_st_request_dublicate
+  open_st_request_in_process
+  open_st_request_new
+  open_st_request_reopened
+  open_st_request_wontfix
+)
+
+for service in "${services[@]}"; do
+  echo "Enabling open_handler@${service}.service"
+  systemctl enable open_handler@"${service}".service
+done
+
+
+# OLD:
+
+# mkdir -p /etc/systemd/system/service-monitor
+
+# cp -r ./conf/service-monitor /etc/systemd/system/service-monitor
+
+# cp ./conf/bin/service-failure-check.sh /usr/local/bin
+# cp ./conf/bin/service-watcher.sh /usr/local/bin
+
+
+# chmod +x /usr/local/bin/service-failure-check.sh
+# chmod +x /usr/local/bin/service-watcher.sh

+ 2 - 1
handlers/conf/open_handler@.service

@@ -6,7 +6,8 @@ After=network.target
 Type=simple
 Type=simple
 User=root
 User=root
 WorkingDirectory=/root/sharix-open-webapp-base/webservice_running/handlers
 WorkingDirectory=/root/sharix-open-webapp-base/webservice_running/handlers
-ExecStart=/root/sharix-open-webapp-base/webservice_running/handlers/.venv/bin/python3 /root/sharix-open-webapp-base/webservice_running/handlers/main.py -b %i
+ExecStart=/root/sharix-open-webapp-base/webservice_running/handlers/.venv/bin/python3 /root/sharix-open-webapp-base/webservice_running/handlers/main.py -b %i -d
+# TODO: Убрать -d,, когжа не будет нужным
 Restart=always
 Restart=always
 RestartSec=60s
 RestartSec=60s
 
 

+ 34 - 1
handlers/config.py

@@ -1,3 +1,8 @@
+from dotenv import load_dotenv
+import os
+
+load_dotenv()
+
 # rename this file to config.py
 # rename this file to config.py
 BOTLIST = [
 BOTLIST = [
     'open_basic_bot',
     'open_basic_bot',
@@ -29,9 +34,37 @@ BOTLIST = [
 JSERVER = "ej.sharix-app.org"
 JSERVER = "ej.sharix-app.org"
 PASSWORD = "12345"
 PASSWORD = "12345"
 PORT = 5222
 PORT = 5222
-API_URL = "https://testopen.sharix-app.org/"
+API_URL = "https://testopen1.sharix-app.org/"
 
 
 # LOG_DIR = "/var/log/"
 # LOG_DIR = "/var/log/"
 LOG_DIR = "./log/"
 LOG_DIR = "./log/"
 
 
 DEFAULT_INTERVAL_ATTEMPTS = 10
 DEFAULT_INTERVAL_ATTEMPTS = 10
+DEFAULT_ASSIGNED_TO_ATTEMPTS = 3
+
+class KEYS:
+    OPEN_BASIC_BOT = os.getenv('open_basic_bot_key')
+    STATUS_CHANGER = os.getenv('status_changer_key')
+    OPEN_ACCESS_REQUEST_ACCEPTED = os.getenv('open_access_request_accepted_key')
+    OPEN_ACCESS_REQUEST_PENDING = os.getenv('open_access_request_pending_key')
+    OPEN_NEG_REQUEST_ACCEPTED = os.getenv('open_neg_request_accepted_key')
+    OPEN_NEG_REQUEST_PENDING = os.getenv('open_neg_request_pending_key')
+    OPEN_SERVICE_REQUEST_ACCEPTED = os.getenv('open_service_request_accepted_key')
+    OPEN_SERVICE_REQUEST_ASSIGNED = os.getenv('open_service_request_assigned_key')
+    OPEN_SERVICE_REQUEST_BOOKED = os.getenv('open_service_request_booked_key')
+    OPEN_SERVICE_REQUEST_BOOKED_V2 = os.getenv('open_service_request_booked_v2_key')
+    OPEN_SERVICE_REQUEST_CLOSED = os.getenv('open_service_request_closed_key')
+    OPEN_SERVICE_REQUEST_DECLINED = os.getenv('open_service_request_declined_key')
+    OPEN_SERVICE_REQUEST_DONE = os.getenv('open_service_request_done_key')
+    OPEN_SERVICE_REQUEST_FORCEMAJEURE = os.getenv('open_service_request_forcemajeure_key')
+    OPEN_SERVICE_REQUEST_PENDING = os.getenv('open_service_request_pending_key')
+    OPEN_SERVICE_REQUEST_PREFORCEMAJEURE = os.getenv('open_service_request_preforcemajeure_key')
+    OPEN_SERVICE_REQUEST_PRESTART = os.getenv('open_service_request_prestart_key')
+    OPEN_SERVICE_REQUEST_PROCESS = os.getenv('open_service_request_process_key')
+    OPEN_ST_REQUEST_ASSIGNED = os.getenv('open_st_request_assigned_key')
+    OPEN_ST_REQUEST_DONE = os.getenv('open_st_request_done_key')
+    OPEN_ST_REQUEST_DUBLICATE = os.getenv('open_st_request_dublicate_key')
+    OPEN_ST_REQUEST_IN_PROCESS = os.getenv('open_st_request_in_process_key')
+    OPEN_ST_REQUEST_NEW = os.getenv('open_st_request_new_key')
+    OPEN_ST_REQUEST_REOPENED = os.getenv('open_st_request_reopened_key')
+    OPEN_ST_REQUEST_WONTFIX = os.getenv('open_st_request_wontfix_key')

+ 25 - 0
handlers/core/data_parsers.py

@@ -0,0 +1,25 @@
+
+import json
+from classes.Order import Order
+from classes.OrderTicket import OrderTicket
+
+
+def jsonToOrder(jsonstring) -> Order:
+    """
+    Функция преобразования json в объект класса Order
+    """
+    jsonObj = json.loads(jsonstring)
+    print(jsonObj)
+    u = Order(**jsonObj)
+    return u
+
+
+def jsonToOrderTicket(jsonstring) -> OrderTicket:
+    """
+    Функция преобразования json в объект класса OrderTicket
+    """
+    print(jsonstring)
+    jsonObj = json.loads(jsonstring)
+    print(jsonObj)
+    u = OrderTicket(**jsonObj)
+    return u

+ 40 - 0
handlers/core/requesters.py

@@ -0,0 +1,40 @@
+from classes.Ticket import Ticket
+import config
+import requests
+from typing import List
+from requests.models import Response
+
+class TicketRequester:
+    def __init__(self, token: str):
+        self.token = token
+
+
+    def patch(self, ticket: Ticket, data: dict) -> Response:
+        """ Частичное обновление тикета """
+        url: str = config.API_URL + f"tickets/api/v2/ticket/{ticket.id}"
+        headers = {'Authorization': f'Api-Key {self.token}'}
+        response = requests.patch(url, json=data, headers=headers)
+        return response
+
+
+    def all(self, params: dict = {}) -> List[Ticket]:
+        """ Получение всех тикетов """
+        url: str = config.API_URL + "tickets/api/v2/ticket/"
+        headers = {'Authorization': f'Api-Key {self.token}'}
+        response = requests.get(url, headers=headers, params=params)
+        return list(map(lambda x: Ticket(**x), response.json()))
+
+
+    def put(self, ticket: Ticket, data: dict) -> Ticket:
+        """ Обновление тикета """
+        None
+
+
+    def post(self, ticket: Ticket, data: dict) -> Ticket:
+        """ Создание тикета """
+        None
+
+
+    def delete(self, ticket: Ticket) -> Ticket:
+        """ Удаление тикета """
+        None

+ 0 - 12
handlers/core/utils.py

@@ -1,12 +0,0 @@
-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),
-    ]

+ 1 - 1
handlers/old_st_request_assigned.py → handlers/depr/handlers/old_st_request_assigned.py

@@ -49,7 +49,7 @@ def status_changer_wait(period, localtask):
 
 
 def status_changer_process(ticket):
 def status_changer_process(ticket):
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
-    tickets_new = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
+    tickets_new = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
     # if ticket.id == 2103:
     # if ticket.id == 2103:
     #     for ticket_new in tickets_new:
     #     for ticket_new in tickets_new:
     #         metaservice_admin(ticket_new,ticket.group)
     #         metaservice_admin(ticket_new,ticket.group)

+ 1 - 1
handlers/old_st_request_done.py → handlers/depr/handlers/old_st_request_done.py

@@ -49,7 +49,7 @@ def status_changer_wait(period, localtask):
 
 
 def status_changer_process(ticket):
 def status_changer_process(ticket):
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
-    tickets_new = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
+    tickets_new = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
     # if ticket.id == 2103:
     # if ticket.id == 2103:
     #     for ticket_new in tickets_new:
     #     for ticket_new in tickets_new:
     #         metaservice_admin(ticket_new,ticket.group)
     #         metaservice_admin(ticket_new,ticket.group)

+ 1 - 1
handlers/old_st_request_new.py → handlers/depr/handlers/old_st_request_new.py

@@ -43,7 +43,7 @@ idle_value = 10
 
 
 
 
 def status_new_process(ticket):
 def status_new_process(ticket):
-    tickets_new = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
+    tickets_new = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
     for ticket_new in tickets_new:
     for ticket_new in tickets_new:
         send_to_user(ticket_new)
         send_to_user(ticket_new)
 
 

+ 1 - 1
handlers/old_st_request_wontfix.py → handlers/depr/handlers/old_st_request_wontfix.py

@@ -49,7 +49,7 @@ def status_changer_wait(period, localtask):
 
 
 def status_changer_process(ticket):
 def status_changer_process(ticket):
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
-    tickets_new = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
+    tickets_new = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
     # if ticket.id == 2103:
     # if ticket.id == 2103:
     #     for ticket_new in tickets_new:
     #     for ticket_new in tickets_new:
     #         metaservice_admin(ticket_new,ticket.group)
     #         metaservice_admin(ticket_new,ticket.group)

+ 0 - 0
handlers/open_access_request_accepted.py → handlers/depr/handlers/open_access_request_accepted.py


+ 0 - 0
handlers/open_access_request_pending.py → handlers/depr/handlers/open_access_request_pending.py


+ 0 - 0
handlers/open_basic_bot.py → handlers/depr/handlers/open_basic_bot.py


+ 0 - 0
handlers/open_neg_request_accepted.py → handlers/depr/handlers/open_neg_request_accepted.py


+ 0 - 0
handlers/open_neg_request_pending.py → handlers/depr/handlers/open_neg_request_pending.py


+ 0 - 0
handlers/open_service_request_accepted.py → handlers/depr/handlers/open_service_request_accepted.py


+ 0 - 0
handlers/open_service_request_assigned.py → handlers/depr/handlers/open_service_request_assigned.py


+ 0 - 0
handlers/open_service_request_booked.py → handlers/depr/handlers/open_service_request_booked.py


+ 0 - 0
handlers/open_service_request_booked_v2.py → handlers/depr/handlers/open_service_request_booked_v2.py


+ 0 - 0
handlers/open_service_request_closed.py → handlers/depr/handlers/open_service_request_closed.py


+ 0 - 0
handlers/open_service_request_declined.py → handlers/depr/handlers/open_service_request_declined.py


+ 0 - 0
handlers/open_service_request_done.py → handlers/depr/handlers/open_service_request_done.py


+ 0 - 0
handlers/open_service_request_forcemajeure.py → handlers/depr/handlers/open_service_request_forcemajeure.py


+ 0 - 0
handlers/open_service_request_pending.py → handlers/depr/handlers/open_service_request_pending.py


+ 0 - 0
handlers/open_service_request_preforcemajeure.py → handlers/depr/handlers/open_service_request_preforcemajeure.py


+ 0 - 0
handlers/open_service_request_prestart.py → handlers/depr/handlers/open_service_request_prestart.py


+ 0 - 0
handlers/open_service_request_process.py → handlers/depr/handlers/open_service_request_process.py


+ 0 - 0
handlers/open_st_request_assigned.py → handlers/depr/handlers/open_st_request_assigned.py


+ 0 - 0
handlers/open_st_request_done.py → handlers/depr/handlers/open_st_request_done.py


+ 0 - 0
handlers/open_st_request_dublicate.py → handlers/depr/handlers/open_st_request_dublicate.py


+ 0 - 0
handlers/open_st_request_in_process.py → handlers/depr/handlers/open_st_request_in_process.py


+ 0 - 0
handlers/open_st_request_new.py → handlers/depr/handlers/open_st_request_new.py


+ 0 - 0
handlers/open_st_request_reopened.py → handlers/depr/handlers/open_st_request_reopened.py


+ 0 - 0
handlers/open_st_request_wontfix.py → handlers/depr/handlers/open_st_request_wontfix.py


+ 0 - 0
handlers/open_student_handler.py → handlers/depr/handlers/open_student_handler.py


+ 0 - 0
handlers/open_template_bot.py → handlers/depr/handlers/open_template_bot.py


+ 1 - 1
handlers/st_request_in_process.py → handlers/depr/handlers/st_request_in_process.py

@@ -61,7 +61,7 @@ def process_in_progress_ticket(ticket, timeout, reminder_interval):
                 break
                 break
 
 
         # Проверяем, не изменился ли статус тикета
         # Проверяем, не изменился ли статус тикета
-        updated_ticket_list = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/")
+        updated_ticket_list = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/")
         if updated_ticket_list and updated_ticket_list[0].status != "IN PROCESS":
         if updated_ticket_list and updated_ticket_list[0].status != "IN PROCESS":
             break
             break
 
 

+ 29 - 9
handlers/handlers/open_access_request_pending.py

@@ -4,14 +4,14 @@ import config
 import logging
 import logging
 from core.JabberBot import JabberBot
 from core.JabberBot import JabberBot
 from slixmpp.stanza import Message
 from slixmpp.stanza import Message
-import jsonAndRequest as jsreq
 from time import sleep
 from time import sleep
 from core.lib import run_process
 from core.lib import run_process
 from classes.Ticket import Ticket
 from classes.Ticket import Ticket
 from typing import List
 from typing import List
 from concurrent.futures import ThreadPoolExecutor
 from concurrent.futures import ThreadPoolExecutor
 from core.SystemdKiller import SystemdKiller
 from core.SystemdKiller import SystemdKiller
-from core.utils import get_init_data
+from core.requesters import TicketRequester
+from config import KEYS
 
 
 botname = "open_access_request_pending"
 botname = "open_access_request_pending"
 operating_status = 320
 operating_status = 320
@@ -35,8 +35,10 @@ proceed_to = [
 ]
 ]
 """ Список jid, кому бот может отправлять сообщения в результате обработки заявки """
 """ Список jid, кому бот может отправлять сообщения в результате обработки заявки """
 
 
+ASSIGNET_TO_ATTEMPTS = 3
+""" Количество пользователей, которым будет отправлено сообщение """
 INTERVAL_ATTEMPTS = 3
 INTERVAL_ATTEMPTS = 3
-""" Количество попыток отправки сообщения """
+""" Количество сообщений, которые будут отправлены пользователю """
 # INTERVAL_TIME = 30 * 60  # 30 минут в секундах
 # INTERVAL_TIME = 30 * 60  # 30 минут в секундах
 INTERVAL_TIME = 5 # Для проверки
 INTERVAL_TIME = 5 # Для проверки
 """ Интервал времени между попытками отправки сообщения """
 """ Интервал времени между попытками отправки сообщения """
@@ -46,6 +48,8 @@ TEMP_TICKETS: List[Ticket] = []
 ID_TICKETS_FOR_REMOVE: List[int] = []
 ID_TICKETS_FOR_REMOVE: List[int] = []
 """ Список id тикетов для удаления """
 """ Список id тикетов для удаления """
 
 
+ticket_requester = TicketRequester(KEYS.OPEN_ACCESS_REQUEST_PENDING)
+
 def message_handler(msg: Message):
 def message_handler(msg: Message):
     """Обработчик входящих сообщений"""
     """Обработчик входящих сообщений"""
 
 
@@ -72,7 +76,7 @@ def start_handler():
 
 
     logging.info(">>>>>  %s  |---| %s  <<<<<", JID, PASSWORD)
     logging.info(">>>>>  %s  |---| %s  <<<<<", JID, PASSWORD)
 
 
-    tickets: List[Ticket] = get_init_data(operating_status)
+    tickets: List[Ticket] = ticket_requester.all({"status": 320})
 
 
     with ThreadPoolExecutor() as executor:
     with ThreadPoolExecutor() as executor:
         killer = SystemdKiller()
         killer = SystemdKiller()
@@ -92,7 +96,7 @@ def start_handler():
             # Фильтрация тикетов
             # Фильтрация тикетов
             tickets = [t for t in processed if t is not None]
             tickets = [t for t in processed if t is not None]
             
             
-            logging.debug(tickets)
+            logging.debug('Кол-во тикетов:' + str(len(tickets)))
             logging.debug("Sleep")
             logging.debug("Sleep")
             killer.exit_event.wait(timeout=INTERVAL_TIME)
             killer.exit_event.wait(timeout=INTERVAL_TIME)
 
 
@@ -102,7 +106,10 @@ def start_handler():
 def interval_attempts_unlimited(ticket: Ticket) -> None:
 def interval_attempts_unlimited(ticket: Ticket) -> None:
     logging.debug(f"Лимит попыток обработки тикета {ticket.id} исчерпан")
     logging.debug(f"Лимит попыток обработки тикета {ticket.id} исчерпан")
     
     
-    # db.changestatus
+
+    response = ticket_requester.patch(ticket, {"status": 359})
+    
+    # TODO: implement send ticket changed to next handler
     # bot.send_message(JID, f"Сообщение отправлено {JID}: {datetime.now()}")
     # bot.send_message(JID, f"Сообщение отправлено {JID}: {datetime.now()}")
     # bot message:
     # bot message:
     # {
     # {
@@ -113,12 +120,12 @@ def interval_attempts_unlimited(ticket: Ticket) -> None:
 
 
 
 
 def processing(ticket: Ticket) -> None:
 def processing(ticket: Ticket) -> None:
-    logging.debug(f"Начало обработки тикета {ticket.id}")
+    logging.debug(f"Начало обработки тикета {ticket.id}. Лимит: {ticket.interval_attempts}")
 
 
     message = f"Тикет {ticket.id} ожидает решения"
     message = f"Тикет {ticket.id} ожидает решения"
 
 
-    send_notification_to_admins(ticket, message)
-    bot.send_message(ticket.assigned_to, message)
+    # send_notification_to_admins(ticket, message)
+    # bot.send_message(ticket.assigned_to, message)
 
 
     logging.debug(f"Конец обработки тикета {ticket.id}")
     logging.debug(f"Конец обработки тикета {ticket.id}")
 
 
@@ -129,6 +136,19 @@ def send_notification_to_admins(ticket: Ticket, admins: List[str], message: str)
         bot.send_message(admin, message)
         bot.send_message(admin, message)
     logging.info(f"Уведомление отправлено администраторам: {ticket.id}")
     logging.info(f"Уведомление отправлено администраторам: {ticket.id}")
 
 
+
+def set_assigned_to(ticket: Ticket) -> Ticket:
+    """Проверка, назначен ли тикет на пользователя"""
+    if ticket.assigned_to is None:
+        # TODO: add function how select user from db
+        # ticket.assigned_to = "username"
+
+        # assigned_to = ticket_requester.patch(ticket, {"assigned_to": "open_access_request_pending@ej.sharix-app.org"})
+        # ticket.assigned_to = assigned_to
+        None
+    return ticket
+
+
 # def get_token():
 # def get_token():
 #     return jsreq.requestGetToken(botname, PASSWORD, config.API_URL + "/auth/token/login/")
 #     return jsreq.requestGetToken(botname, PASSWORD, config.API_URL + "/auth/token/login/")
 
 

+ 3 - 19
handlers/jsonAndRequest.py

@@ -6,25 +6,9 @@ import config
 from classes.Answer import Answer
 from classes.Answer import Answer
 from classes.Order import Order
 from classes.Order import Order
 from classes.OrderTicket import OrderTicket
 from classes.OrderTicket import OrderTicket
-from classes.Ticket_user import Ticket_user
+from classes.Ticket import Ticket
 
 
 
 
-# Функция преобразования json в объект класса Order
-def jsonToOrder(jsonstring) -> Order:
-    jsonObj = json.loads(jsonstring)
-    print(jsonObj)
-    u = Order(**jsonObj)
-    return u
-
-
-# Функция преобразования json в объект класса OrderTicket
-def jsonToOrderTicket(jsonstring) -> OrderTicket:
-    print(jsonstring)
-    jsonObj = json.loads(jsonstring)
-    print(jsonObj)
-    u = OrderTicket(**jsonObj)
-    return u
-
 
 
 # Функция обращения к апи и получение токена
 # Функция обращения к апи и получение токена
 def requestGetToken(login, password, url) -> str:
 def requestGetToken(login, password, url) -> str:
@@ -119,7 +103,7 @@ def requestGetList(auth_token, url):
     return startlist
     return startlist
 
 
 
 
-def requestGetTicket_user(auth_token, url):
+def requestGetTicket(auth_token, url):
     headers = {'Authorization': f'Token {auth_token}'}
     headers = {'Authorization': f'Token {auth_token}'}
     response = requests.get(url, headers=headers)
     response = requests.get(url, headers=headers)
 
 
@@ -131,7 +115,7 @@ def requestGetTicket_user(auth_token, url):
     else:
     else:
         for i in tickettext:
         for i in tickettext:
             try:
             try:
-                ticket = Ticket_user(**i)
+                ticket = Ticket(**i)
                 startlist.append(ticket)
                 startlist.append(ticket)
             except Exception as ex:
             except Exception as ex:
                 print(ex)
                 print(ex)

+ 2 - 0
handlers/requirements.txt

@@ -2,11 +2,13 @@ aiodns==3.2.0
 certifi==2022.12.7
 certifi==2022.12.7
 cffi==1.17.1
 cffi==1.17.1
 charset-normalizer==3.1.0
 charset-normalizer==3.1.0
+dotenv==0.9.9
 idna==3.4
 idna==3.4
 pyasn1==0.6.1
 pyasn1==0.6.1
 pyasn1_modules==0.4.1
 pyasn1_modules==0.4.1
 pycares==4.5.0
 pycares==4.5.0
 pycparser==2.22
 pycparser==2.22
+python-dotenv==1.1.0
 requests==2.29.0
 requests==2.29.0
 six==1.16.0
 six==1.16.0
 slixmpp==1.9.1
 slixmpp==1.9.1

+ 1 - 1
handlers/status_changer.py

@@ -49,7 +49,7 @@ def status_changer_wait(period, localtask):
 
 
 def status_changer_process(ticket):
 def status_changer_process(ticket):
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
     bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет в обработчике\n")
-    tickets_new = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
+    tickets_new = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket_list/{ticket.id}")
     if ticket.id == 2103:
     if ticket.id == 2103:
         for ticket_new in tickets_new:
         for ticket_new in tickets_new:
             metaservice_admin(ticket_new, ticket.group)
             metaservice_admin(ticket_new, ticket.group)

+ 28 - 0
lib/seed.py

@@ -0,0 +1,28 @@
+from rest_framework_api_key.models import APIKey
+from webservice_running.handlers.config import BOTLIST
+
+
+def create_webservice_seed():
+    create_api_key_for_handlers()
+
+def create_api_key_for_handlers():
+    api_key_list = []
+
+    for botname in BOTLIST:
+        keys_to_revoke = APIKey.objects.filter(name="botname", revoked=False)
+
+        # Отзываем каждый ключ
+        for key in keys_to_revoke:
+            key.revoked = True
+            key.save()
+
+        api_key, key = APIKey.objects.create_key(name=botname)
+        api_key_list.append([botname, key])
+        print(f"Initial API Key for {botname} handler created.")
+
+    api_key_list = list(map(lambda x: x[0] + '_key=' + x[1], api_key_list))
+    txt = '\n'.join(api_key_list)
+
+    with open('webservice_running/handlers/.env', 'w') as f:
+        f.write(txt)
+