Browse Source

reminder for tickets with status IN_PROCESS

blezz-tech 2 weeks ago
parent
commit
d5c9985601
1 changed files with 79 additions and 0 deletions
  1. 79 0
      handlers/st_request_in_process.py

+ 79 - 0
handlers/st_request_in_process.py

@@ -0,0 +1,79 @@
+import json
+import requests
+import config
+import hashlib
+from datetime import datetime
+import time
+import threading
+import jsonAndRequest as jsreq
+
+global ticketlist
+
+botname = "st_request_wontfix"
+JID = botname + "@" + config.JSERVER
+PORT = config.PORT
+PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest()
+
+listen_to = ["st_request_wontfix@ej.sharix-app.org"]
+proceed_to = ["numbers"]
+
+# Новые параметры
+INFINITE_TIMEOUT = -1  # Бесконечный таймаут
+DEFAULT_REMINDER_INTERVAL = 30 * 60  # 30 минут в секундах
+MAX_REMINDERS = 3  # Максимальное количество напоминаний
+
+def send_reminder(user, ticket):
+    message = f"Напоминание: необходимо принять решение по тикету {ticket.id}"
+    # Здесь должен быть код для отправки сообщения пользователю
+    print(f"Отправлено напоминание пользователю {user} о тикете {ticket.id}")
+
+def send_wontfix_notification(user, ticket):
+    message = f"Уведомление: тикет {ticket.id} был отмечен как WONTFIX из-за отсутствия действий"
+    # Здесь должен быть код для отправки сообщения пользователю
+    print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}")
+
+def process_in_progress_ticket(ticket, timeout, reminder_interval):
+    start_time = datetime.now()
+    reminders_sent = 0
+    
+    while True:
+        current_time = datetime.now()
+        time_in_progress = (current_time - start_time).total_seconds()
+        
+        if timeout != INFINITE_TIMEOUT and time_in_progress > timeout:
+            # Превышен таймаут, меняем статус на WONTFIX
+            jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/", {"status": "WONTFIX"})
+            send_wontfix_notification(ticket.assigned_to, ticket)
+            break
+        
+        if time_in_progress >= (reminders_sent + 1) * reminder_interval:
+            send_reminder(ticket.assigned_to, ticket)
+            reminders_sent += 1
+            
+            if reminders_sent >= MAX_REMINDERS:
+                # Превышено максимальное количество напоминаний
+                jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/", {"status": "WONTFIX"})
+                send_wontfix_notification(ticket.assigned_to, ticket)
+                break
+        
+        # Проверяем, не изменился ли статус тикета
+        updated_ticket_list = jsreq.requestGetTicket_user(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/")
+        if updated_ticket_list and updated_ticket_list[0].status != "IN PROCESS":
+            break
+        
+        time.sleep(60)  # Проверяем каждую минуту
+
+def status_changer():
+    while True:
+        ticketlist = jsreq.requestGetList(token, config.API_URL + "tickets/api/ticket_list/")
+        for ticket in ticketlist:
+            if ticket.status == "IN PROCESS":
+                bot.bot_log(f"{botname} {datetime.now().strftime('%Y-%m-%d')} Тикет {ticket.id} в обработке\n")
+                t1 = threading.Thread(target=process_in_progress_ticket, args=(ticket, INFINITE_TIMEOUT, DEFAULT_REMINDER_INTERVAL))
+                t1.start()
+        time.sleep(300)  # Обновляем ticketlist каждые 5 минут
+
+# Инициализация и запуск бота
+token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/")
+bot = JabberBot(JID, PASSWORD, PORT)
+bot.start(status_changer)