Browse Source

Added logging library

Vitaliy Kungurtsev 1 year ago
parent
commit
9494cfc1b9
6 changed files with 103 additions and 34 deletions
  1. 1 0
      .gitignore
  2. 16 6
      BotClass.py
  3. 1 1
      config_template.py
  4. 31 13
      jsonAndRequest.py
  5. 5 0
      loggingConfig.py
  6. 49 14
      open_template_bot.py

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 __pycache__/
 env/
+venv/
 config.py
 *bottickets.log
 *.log

+ 16 - 6
BotClass.py

@@ -2,6 +2,9 @@ import sys, xmpp
 from xmpp import cli
 from datetime import datetime
 import json
+import logging
+import loggingConfig
+import pprint
 
 import jsonAndRequest as jsreq
 
@@ -20,14 +23,17 @@ class JabberBot:
         conn_result = self.conn.connect()
         if not conn_result:
             print("Can't connect to server!\n")
+            logging.info("Can't connect to server!")
             sys.exit(1)
     #Метод аутентификации
     def auth(self): 
         #по идее, тут может быть актуально также передать информацию относительно порта, например
         auth_result = self.conn.auth(self.user, self.password)
         if not auth_result:
-            print (self.user, self.password)
-            print("Can't to authorize!\n")
+            # print (self.user, self.password)
+            logging.debug(self.user, self.password)
+            # print("Can't to authorize!\n")
+            logging.info("Can't to authorize!")
             sys.exit(1)
     #Метод для привязки функций к событиям
     def register_handler(self, name, handler):
@@ -36,7 +42,8 @@ class JabberBot:
     def step_on(self):
         try:
             self.conn.Process(1) #с какой частотой происходит подключение к серверу, в данном случае каждую секунду
-        except KeyboardInterrupt: return 0
+        except KeyboardInterrupt: 
+            return 0
         return 1
 
     def bot_log(self, message):
@@ -44,23 +51,26 @@ class JabberBot:
         logfile = open(datetime.now().strftime('%Y-%m-%d') + "-" + self.user + ".log", "a")
         logfile.write(message)
         logfile.close()
-        print (message)
+        # print (message)
 
     def send_notification(self, recipient, message):
         self.conn.send(xmpp.Message(recipient, message))
-        self.bot_log("Message sent successfully"+" "+recipient+" "+message)
+        # self.bot_log("Message sent successfully"+" "+recipient+" "+message)
+        logging.debug(f"Message sent successfully\nRecipient: {recipient}\nMessage: {pprint.pformat(message)}")
 
     # recipient - это конкретный jid следующего обработчика заявки, ticket - json с заявкой.
     def proceed_status(self, recipient, ticket):
         #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему
         jsonTicket = json.dumps(ticket.__dict__)
         self.conn.send(xmpp.Message(recipient, jsonTicket))
-        self.bot_log("Message sent successfully"+" "+recipient+" "+jsonTicket)
+        # self.bot_log("Message sent successfully"+" "+recipient+" "+jsonTicket)
+        logging.debug(f"Message sent successfully\nRecipient: {recipient}\nJsonTicket: {pprint.pformat(jsonTicket)}")
 
     #сюда можно как параметры передавать переменную для значения Process в вызываемой функции, а также передавать информацию о том, какой из обработчиков ввызывать в бесконечном цикле
     def start(self, handler, *args):
         self.conn.sendInitPresence()#статус аккаунта бота (активен или нет)
         print("Bot started!")
+        logging.info("Bot started!")
         while self.step_on():
             #это вызов конкретной функции для обработки статуса конкретным ботом
             #handler(args)

+ 1 - 1
config_template.py

@@ -14,4 +14,4 @@ API_URL = "https://testbase.sharix-app.org"
 # бот в конверс
 
 # JID="bottickets@msg.sharix-app.org"
-# PASSWORD="12345!"
+# PASSWORD="12345!"

+ 31 - 13
jsonAndRequest.py

@@ -2,6 +2,9 @@ import json
 import requests
 import config
 import ast
+import logging
+import loggingConfig
+import pprint
 
 #Тестовый класс User и Address (ВАЖНО!!!) поля классов должны называться также как и поля json объекта
 '''
@@ -158,15 +161,18 @@ class OrderTicket(object):
 #Функция преобразования json в объект класса Order
 def jsonToOrder(jsonstring) -> Order:
     jsonObj = json.loads(jsonstring)
-    print(jsonObj)
+    # print(jsonObj)
+    logging.debug(jsonObj)
     u = Order(**jsonObj)
     return u
 
 #Функция преобразования json в объект класса OrderTicket
 def jsonToOrderTicket(jsonstring) -> OrderTicket:
-    print (jsonstring)
+    # print (jsonstring)
+    logging.debug(jsonstring)
     jsonObj = json.loads(jsonstring)
-    print(jsonObj)
+    # print(jsonObj)
+    logging.debug(jsonObj)
     u = OrderTicket(**jsonObj)
     return u
 
@@ -195,12 +201,15 @@ def createUser(username, phone, password, url) -> str:
 #Функция обращения к апи и получение списка пользователей
 def requestGetListUser():
     auth_token=requestGetToken()
-    print(auth_token)
+    # print(auth_token)
+    logging.debug(f"Auth token: {auth_token}")
     headers = {'Authorization': f'Token {auth_token}'}
     url = 'https://user.sharix-app.org/platform/api/sharix-users/'
     response = requests.get(url, headers=headers)
-    print(response)
-    print(response.json())
+    # print(response)
+    logging.debug(response)
+    # print(response.json())
+    logging.debug(f"Auth token: {response.json()}")
 
 
 def requestGetList(auth_token, url):
@@ -210,24 +219,33 @@ def requestGetList(auth_token, url):
     #url = 'https://user.sharix-app.org/platform/api/sharix-users/'
     response = requests.get(config.API_URL+"/tickets/api/tickets/?list_id=10", headers=headers)
     #response = requests.get(config.API_URL+"/metaservicesynced/api/orders/", headers=headers)
-    print(response)
+    #print(response)
+    logging.debug(response)
     #return response.json()
-    print(response.json())
+    #print(response.json())
+    logging.debug(pprint.pformat(response.json()))
     ordertext=response.json()
     startlist = []
     
     if not ordertext:
-        print("Empty array")
+        # print("Empty array")
+        logging.info("Empty array")
     else:
         for i in ordertext:
-            print (i, "PROCESSING")
+            # print (i, "PROCESSING")
+            logging.debug(f"\"PROCESSING\"\n{pprint.pformat(i)}")
             try:
                 orderticket = OrderTicket(**i)
-                print(i, "ORDER ", orderticket)
+                # print(i, "ORDER ", orderticket)
+                # logging.debug(f"{pprint.pformat(i)}, \"ORDER\" {orderticket}")
                 startlist.append(orderticket)
+                logging.debug(f"\"ORDER\"\n{orderticket}")
             except Exception as ex:
-                print(ex)
-    print (startlist)
+                # print(ex)
+                logging.error("Exception occurred", exc_info=True)
+
+    # print (startlist)
+    logging.debug("Startlist: " + pprint.pformat(startlist))
     #if ordertext is not None:
     #    for order in ordertext:
     #        print (order)

+ 5 - 0
loggingConfig.py

@@ -0,0 +1,5 @@
+import logging
+logging.basicConfig(filename='app.log', filemode='w', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(module)s/%(funcName)s/%(lineno)d : %(message)s', datefmt='%d/%m/%y %H:%M:%S')
+
+# Раскомментируй, чтобы полностью отключить добавление в .log файл (создатся пустой)
+# logging.disable(logging.CRITICAL)

+ 49 - 14
open_template_bot.py

@@ -1,6 +1,11 @@
+import config
 import xmpp
+import logging
+import loggingConfig
+import pprint
+
+
 from xmpp import cli
-import config
 from BotClass import JabberBot
 import json
 #раскомментировать, когда перейдем на разные пароли
@@ -26,13 +31,21 @@ PORT=config.PORT
 #раскомментировать, когда перейдем на разные пароли
 PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
 
-print(JID, PASSWORD)
+logging.debug(f"\n JID: {JID}\n PASSWORD: {PASSWORD}")
 
 #таким образом хранится список jid, от которых можно получать сообщения этому боту
-listen_to=["test@ej.sharix-app.org", "open_template_bot@ej.sharix-app.org"]
+listen_to=[
+    "test@ej.sharix-app.org", 
+    "open_template_bot@ej.sharix-app.org"
+    ]
 
 #тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
-proceed_to=["open_template_bot@ej.sharix-app.org", "test@ej.sharix-app.org", "test1@ej.sharix-app.org", "open_servicerequest_forcemajeure@ej.sharix-app.org"]
+proceed_to=[
+    "open_template_bot@ej.sharix-app.org", 
+    "test@ej.sharix-app.org", 
+    "test1@ej.sharix-app.org", 
+    "open_servicerequest_forcemajeure@ej.sharix-app.org"
+    ]
 
 #максимальное значение попыток обработать заказ
 idle_value=10
@@ -44,16 +57,26 @@ def message_handler(conn, mess):
     #user = mess.getNode()#только jid 
    
    #нужна проверка, данный обработчик вообще должен от данного отправителя получать сообщения или нет. Подсказка ниже
-    print (str(user).split("/")[0])
+    #print (str(user).split("/")[0])
+    logging.debug(str(user).split("/")[0])
+    # input()
     if (str(user).split("/")[0]) in listen_to:
-        print(text)
-        print(mess)
+        # print(text)
+        # print(mess)
+        logging.debug(pprint.pformat(text))
+        logging.debug(pprint.pformat(mess))
+        # input()
 
         if text is not None:
+            logging.debug(f"text before jsonToOrderTicket: {pprint.pformat(text)}")
             orderObj = jsreq.jsonToOrderTicket(text)
-            print (orderObj)
+            logging.debug(f"text after jsonToOrderTicket: {pprint.pformat(orderObj)}")
+            # print (orderObj)
             tasklist.append(orderObj)
+            logging.info("Поступивший заказ успешно добавлен в очередь обработки")
+            logging.debug(pprint.pformat(tasklist))
             bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+            # input()
 
 def open_bot_template_wait(period,localtask):
     bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает\n")
@@ -79,11 +102,15 @@ def open_bot_template_process(localtask):
 def open_bot_template():
     #print("Тут описывается работа со списком задач в данном статусе")
     while (len(tasklist)):
+        logging.info(f"Всего задач: {len(tasklist)}")
+        logging.debug(f"Tasklist: {pprint.pformat(tasklist)}")
     #for i in range(len(tasklist)):
         #проверяем элемент tasklist[i]
         #print (i, len(tasklist))
         localtask=tasklist.pop(0)
         bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        logging.debug(f"Заказ в очереди на обработке: {localtask} ")
+        # input("(open_template_bot) INPUT TO CONTINUE...")
         #bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " " + str(i) + " " + "Заказ в очереди на обработке\n")
         #print ("EACH TASKLIST", tasklist[i])
         #localtask=tasklist.pop(i)
@@ -92,20 +119,23 @@ def open_bot_template():
         if (localtask.status!=operating_status):
             bot.proceed_status(proceed_to[-1],localtask)
             bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+            logging.info("Заказ не по адресу, перенаправляем на форсмажор.")
             continue
 
-        if (localtask.title!="10"):
+        if (localtask.title != "10"):
             t1=threading.Thread(target=open_bot_template_wait, args=(5,localtask))
             t1.start()
 
-        if (localtask.title=="101"):
+        if (localtask.title == "101"):
             t1=threading.Thread(target=open_bot_template_process, args=(10,localtask))
             t1.start()
 
         #если никакие обработчики не подошли - отправляем обратно в очередь
         bot.proceed_status(proceed_to[0],localtask)
-        print("Заказ возвращен в очередь\n")
-        print (tasklist)
+        # print("Заказ возвращен в очередь\n")
+        # print (tasklist)
+        logging.info("Заказ возвращен в очередь")
+        logging.debug(tasklist)
 
 #Авторизация и запуск бота
 
@@ -113,13 +143,18 @@ def open_bot_template():
 tasklist = []
 
 #надо инициализировать tasklist при запуске из API
+logging.info("Инициализация токена...")
 token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+logging.info("Токен инициализирован")
+logging.debug(f"token: {token}")
 
 #ВАЖНО! Надо еще фильтровать список по статусу обработки заявки
+logging.info("Получение tasklist...")
 tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?list_id=10")
 #tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets")
-print (len(tasklist))
-
+logging.info("tasklist получен")
+logging.debug(f"tasklist длина: {len(tasklist)}")
+#print (len(tasklist))
 
 bot = JabberBot(JID, PASSWORD, PORT)