|
@@ -7,10 +7,14 @@ import json
|
|
import hashlib
|
|
import hashlib
|
|
from datetime import datetime
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
+import time
|
|
|
|
+import threading
|
|
|
|
+
|
|
#test
|
|
#test
|
|
import jsonAndRequest as jsreq
|
|
import jsonAndRequest as jsreq
|
|
|
|
|
|
global tasklist
|
|
global tasklist
|
|
|
|
+global process_status
|
|
|
|
|
|
#В этом файле содержится только то, что запускает конкретный обработчик
|
|
#В этом файле содержится только то, что запускает конкретный обработчик
|
|
|
|
|
|
@@ -29,10 +33,13 @@ PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
|
|
print(JID, PASSWORD)
|
|
print(JID, PASSWORD)
|
|
|
|
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
#таким образом хранится список jid, от которых можно получать сообщения этому боту
|
|
-listen_to=["test@ej.sharix-app.org", "test1@ej.sharix-app.org"]
|
|
|
|
|
|
+listen_to=["test@ej.sharix-app.org"]
|
|
|
|
|
|
#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
|
|
#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
|
|
-proceed_to=["test1@ej.sharix-app.org"]
|
|
|
|
|
|
+proceed_to=["test1@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
|
|
|
|
+
|
|
|
|
+#максимальное значение попыток обработать заказ
|
|
|
|
+idle_value=10
|
|
|
|
|
|
# обработчик входящих сообщений
|
|
# обработчик входящих сообщений
|
|
def message_handler(conn, mess):
|
|
def message_handler(conn, mess):
|
|
@@ -62,32 +69,73 @@ def message_handler(conn, mess):
|
|
orderObj = jsreq.jsonToUser(text)
|
|
orderObj = jsreq.jsonToUser(text)
|
|
print (orderObj)
|
|
print (orderObj)
|
|
tasklist.append(orderObj)
|
|
tasklist.append(orderObj)
|
|
|
|
+ process_status.append(0)
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
|
|
|
|
|
|
|
|
+def open_bot_template_wait(period, i):
|
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
|
|
|
|
+ time.sleep(period)
|
|
|
|
+ #тут надо искать не по порядковому номеру, а по контенту или передавать указатель на элемент, так как длина списка может измениться по ходу обработки, но надо менять именно в исходном списке
|
|
|
|
+ tasklist[i].address.number=123
|
|
|
|
+ process_status[i]=0
|
|
|
|
|
|
def open_bot_template():
|
|
def open_bot_template():
|
|
#print("Тут описывается работа со списком задач в данном статусе")
|
|
#print("Тут описывается работа со списком задач в данном статусе")
|
|
for i in range(len(tasklist)):
|
|
for i in range(len(tasklist)):
|
|
#проверяем элемент tasklist[i]
|
|
#проверяем элемент tasklist[i]
|
|
bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + str(i) + " " + "Заказ в очереди на обработке\n")
|
|
bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + str(i) + " " + "Заказ в очереди на обработке\n")
|
|
- print ("TASKLIST", tasklist[i])
|
|
|
|
|
|
+ print ("TASKLIST", tasklist[i], process_status[i])
|
|
|
|
+
|
|
|
|
+ #если много циклов с процессом ничего не происходит - это неправильно и отдаем заказ на обработку по форсмажору
|
|
|
|
+ if (process_status[i]>idle_value):
|
|
|
|
+ bot.proceed_status(proceed_to[1],tasklist[i])
|
|
|
|
+ del tasklist[i]
|
|
|
|
+ del process_status[i]
|
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ передан обработчику форс-мажоров по количеству попыток\n")
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ #пропускаем обработку, если процесс еще не готов и инкрементируем счетчик попыток
|
|
|
|
+ if (process_status[i]>0):
|
|
|
|
+ process_status[i] +=1
|
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
|
|
|
|
+ continue
|
|
|
|
|
|
- if (tasklist[i].address.number==122):
|
|
|
|
|
|
+ if (process_status[i]==0):
|
|
|
|
+ print ("Proceeding started")
|
|
|
|
+ #example of function that should be run each time process is ready
|
|
bot.fake_api_call(tasklist[i].name)
|
|
bot.fake_api_call(tasklist[i].name)
|
|
|
|
+
|
|
|
|
+ if (tasklist[i].address.number==122):
|
|
|
|
+ #function that need to be run as thread
|
|
|
|
+ #open_bot_template_wait(5,i)
|
|
|
|
+ t1=threading.Thread(target=open_bot_template_wait, args=(5,i))
|
|
|
|
+ t1.start()
|
|
|
|
+ process_status[i] +=1
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ if (tasklist[i].address.number>130):
|
|
|
|
+ t2=threading.Thread(target=open_bot_template_wait, args=(15,i))
|
|
|
|
+ t2.start()
|
|
|
|
+ print("Заказ оставлен в очереди\n")
|
|
|
|
+ bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
|
|
|
|
|
|
- #он тут вроде не валится, но сообщения не приходят вроде
|
|
|
|
|
|
+ #common way to proceed order
|
|
bot.proceed_status(proceed_to[0],tasklist[i])
|
|
bot.proceed_status(proceed_to[0],tasklist[i])
|
|
-
|
|
|
|
del tasklist[i]
|
|
del tasklist[i]
|
|
|
|
+ del process_status[i]
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ успешно обработан и удален из очереди\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ успешно обработан и удален из очереди\n")
|
|
|
|
+ print("Заказ успешно обработан и удален из очереди\n")
|
|
print (tasklist)
|
|
print (tasklist)
|
|
else:
|
|
else:
|
|
|
|
+ print("Заказ оставлен в очереди\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
|
|
bot.bot_log(botname+" "+str(datetime.now())+" "+str(i)+" "+"Заказ оставлен в очереди\n")
|
|
|
|
|
|
#Авторизация и запуск бота
|
|
#Авторизация и запуск бота
|
|
|
|
|
|
#пустой список заказов
|
|
#пустой список заказов
|
|
tasklist = []
|
|
tasklist = []
|
|
|
|
+#список статусов обработки заказов
|
|
|
|
+process_status = []
|
|
|
|
|
|
bot = JabberBot(JID, PASSWORD, PORT)
|
|
bot = JabberBot(JID, PASSWORD, PORT)
|
|
|
|
|