Browse Source

reminder for tickets with status IN_PROCESS

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

+ 85 - 0
handlers/st_request_in_process.py

@@ -0,0 +1,85 @@
+import requests
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+import hashlib
+from datetime import datetime, timedelta
+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.change_ticket_status(token, config.API_URL, ticket.id, "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.change_ticket_status(token, config.API_URL, ticket.id, "WONTFIX")
+                send_wontfix_notification(ticket.assigned_to, ticket)
+                break
+        
+        # Проверяем, не изменился ли статус тикета
+        updated_ticket = jsreq.get_ticket(token, config.API_URL, ticket.id)
+        if updated_ticket.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)