Selaa lähdekoodia

Update log system and multithreading

liqudong 3 vuotta sitten
vanhempi
commit
9b3cda6d26

+ 11 - 16
alarm.py

@@ -2,29 +2,31 @@
 @Date  :2021/5/21/00219:10:57
 @Desc  :
 """
+import logging
+import threading
 import time
 from event_storage import EventStorage
-from log import Log
 
 
-class Alarm:
+class Alarm(threading.Thread):
     def __init__(self):
+        super(Alarm, self).__init__()
         self._storage = EventStorage()
         self._save_frequency = 5
         self._last_save_time = 0
-        self._log = Log()
+
+    def run(self) -> None:
+        self.overrun_alarm()
 
     def get_real_time_data(self):
         """
         :return: data_dict {'c1': '064', 'c2': '0.1', 'c3': '20.3', 'c4': '43.2', 'c5': '1025.1', 'c6': '0.25', 'c81': '29.823', 'c82': '104.507', 'c83': '253.153'...}
         """
         point_info = self._storage.hardDiskStorage.get_point_info(point_tuple=None)
-        # print(point_info)
         keys_list = []
         for index in point_info:
             keys_list.append('c' + str(index['serial_number']))
         data_dict = self._storage.memoryStorage.get_value(keys_list)
-        # print(data_dict)
         return data_dict
 
     def get_point_table(self):
@@ -50,17 +52,14 @@ class Alarm:
 
     # 越限报警
     def overrun_alarm(self):
-        self._log.info('[overrun_alarm] - Over run alarm module is running!')
+        logging.info('Over run alarm module is running!')
         try:
             point_info = self.get_point_table()
             while 1:
                 self.update_point_table(point_info)
-                # print(time.time(), point_info[0]['alarm_low_limit'], point_info[0]['alarm_up_limit'])
                 data_dict = self.get_real_time_data()
-                # print(data_dict['c1'])
                 for index in point_info:
                     key = 'c' + str(index['serial_number'])
-                    # print('addr = ', addr, 'addr type = ', type(addr))
                     if data_dict[key]:  # 数据不为空且报警状态为零
                         data_dict[key] = float(data_dict[key])
                         if index['alarm_low_limit'] is None or index['alarm_up_limit'] is None:  # 未设置报警限值
@@ -72,22 +71,20 @@ class Alarm:
                                 alarm_unit = {'name': "'" + key + "'", 'data': data_dict[key]}
                                 table_name = "alarm_data_tbl"  # 报警存储表名,可以通过配置文件配置
                                 alarm_time = time.strftime("%Y-%m-%d %H:%M:%S")
-                                # print(alarm_unit)
                                 self._storage.hardDiskStorage.insert_column_many(table_name, alarm_time, alarm_unit)
                                 index['alarm_status'] = 1
                             elif index['alarm_status'] == 1:  # alarm_status == 1:表示本次报警期间非第一次检测的越限
                                 continue
                 time.sleep(1)
         except Exception as e:
-            msg = str(time.strftime("%Y-%m-%d %H:%M:%M"))
-            print(f'{msg}: error in overrun_alarm: {e}')
+            logging.error(e)
 
     def overrun_alarm_storage(self, table_name, save_time, item):
         pass
 
     # 变位报警
     def displacement_alarm(self):
-        self._log.info('[displacement_alarm] - Displacement alarm module is running!')
+        logging.info('[displacement_alarm] - Displacement alarm module is running!')
         point_info = self._storage.hardDiskStorage.get_point_info(point_tuple=None)
 
         keys_list = []
@@ -97,7 +94,6 @@ class Alarm:
 
         while 1:
             now_data_dict = self._storage.memoryStorage.get_value(keys_list)
-            # print(now_data_dict)
             for index in point_info:
                 key = 'c' + str(index['serial_number'])
                 if index['signal_type'] == 'Switch' and now_data_dict[key]:
@@ -114,5 +110,4 @@ class Alarm:
 
 
 if __name__ == '__main__':
-    alarm = Alarm()
-    alarm.overrun_alarm()
+    alarm = Alarm().start()

+ 7 - 9
apis/operate_mysql.py

@@ -6,7 +6,7 @@ from configuration import Configuration
 
 
 class OperateMysql():
-    config = Configuration().get_system_config()
+    config = Configuration().get_config()
     config = config["hardDiskdataBase"]
 
     def __init__(self, config=config, port=3306, charset='utf8'):
@@ -27,20 +27,19 @@ class OperateMysql():
             print(e)
             return False
 
-    def _reConn(self, num=28800, stime=3): #重试连接总次数为1天,这里根据实际情况自己设置,如果服务器宕机1天都没发现就......
+    def _reConn(self, num=28800, stime=3):  # 重试连接总次数为1天,这里根据实际情况自己设置,如果服务器宕机1天都没发现就......
         _number = 0
         _status = True
         while _status and _number <= num:
             try:
-                self.conn.ping()       #cping 校验连接是否异常
+                self.conn.ping()  # cping 校验连接是否异常
                 _status = False
             except:
-                if self._conn()==True: #重新连接,成功退出
+                if self._conn() == True:  # 重新连接,成功退出
                     _status = False
                     break
-                _number +=1
-                time.sleep(stime)      #连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束
-
+                _number += 1
+                time.sleep(stime)  # 连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束
 
     def execute_sql(self, sql):
         try:
@@ -65,7 +64,6 @@ class OperateMysql():
 
         return dict_res
 
-
 # def database_parameters(self):
 #     config = {'ip': 'localhost', 'username': 'rootroot', 'password': 'rootroot', 'dataBaseName': 'shucai'}
-#     self.config = config
+#     self.config = config

+ 1 - 1
config.json

@@ -2,7 +2,7 @@
   "hardDiskdataBase": {
     "ip": "127.0.0.1",
     "username": "root",
-    "password": "sA3b20GdDAfq/UViWnJ63g==",
+    "password": "pass",
     "dataBaseName": "shucai"
   },
   "memoryDatabase": {

+ 18 - 14
configuration.py

@@ -1,4 +1,5 @@
 import json
+import logging
 import os
 import sys
 import base64
@@ -13,28 +14,26 @@ def DesEncrypt(string):
     k = pyDes.des(Des_Key, pyDes.CBC, Des_IV, pad=None,
                   padmode=pyDes.PAD_PKCS5)
     decryptStr = k.decrypt(string)
-    # print(decryptStr)
     return decryptStr
 
 
 class Configuration:
-    def __init__(self):
-        # self.system_config = self.get_system_config()
-        pass
+    def __init__(self, path='config.json'):
+        self.path = path
 
-    def get_system_config(self):
+    def get_config(self):
         """"读取配置"""
-        if sys.platform == 'win32':
-            config_file_path = r'./config.json'
-        elif sys.platform == 'linux':
-            config_file_path = 'config.json'
-        with open(config_file_path) as json_file:
-            config = json.load(json_file)
+        try:
+            with open(self.path) as json_file:
+                config = json.load(json_file)
+            return config
+        except FileNotFoundError as e:
+            logging.error("find config file failed:", e)
+            return None
         # 解密密码和序列号
-        config['hardDiskdataBase']['password'] = DesEncrypt(
-            config['hardDiskdataBase']['password']).decode('utf-8')
+        # config['hardDiskdataBase']['password'] = DesEncrypt(
+        #     config['hardDiskdataBase']['password']).decode('utf-8')
         # config['code'] = DesEncrypt(config['code']).decode('utf-8')
-        return config
 
     def set_config(self):
         pass
@@ -47,3 +46,8 @@ class Configuration:
 
     def updata_device(self):
         pass
+
+
+if __name__ == '__main__':
+    config = Configuration().get_config()
+    print(config)

+ 9 - 27
connectors/shuizhi_tcp_connector.py

@@ -9,7 +9,7 @@ import struct
 import socket
 from connector import Connector
 from event_storage import EventStorage
-from log import Log
+import logging
 from binascii import *
 from crcmod import *
 
@@ -21,7 +21,6 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
         super().__init__()
         self._param_id = {}
         self._len_param = None
-        self.__log = Log()
         self.__sock = None
         self.__connected = False
         self.__stopped = False
@@ -35,8 +34,6 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
         self.__last_seve_time = 0
         self.__data_point_config = self.__storager.get_station_info(name)
         self._storage = EventStorage()
-        # for i in self.__data_point_config:
-        #     print(i)
 
     def open(self):
         self.__stopped = False
@@ -51,11 +48,10 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
         self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)  # 在客户端开启心跳维护
         try:
             self.__sock.connect((self.__ip, self.__port))
-            self.__log.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
-            print(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
+            logging.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
             self.__connected = True
         except socket.error as e:
-            self.__log.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
+            logging.error(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
             self.__connected = False
             self.__reconnect()
 
@@ -67,13 +63,10 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
                 self.__sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)  # 在客户端开启心跳维护
                 self.__sock.connect((self.__ip, self.__port))
                 self.__connected = True
-                self.__log.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
+                logging.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
                 break
             except Exception as e:
-                print("e=", e)
-                print("Continue reconnect in 5s..")
-                self.__log.info(
-                    f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
+                logging.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
                 self.__connected = False
                 time.sleep(5)
 
@@ -134,9 +127,6 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
                 instruct_list.append(bytes.fromhex(crc_check))
         self._len_param = len(instruct_list)
 
-        for i in instruct_list:
-            print(i)
-
         # 创建接收线程
         threading.Thread(target=self.SocketReceive, args=(self.__sock,)).start()
         # 循环发送指令
@@ -145,7 +135,6 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
             if not self.__connected:
                 continue
             try:
-                # print("发送", instruct_list[sendFlag], "....")
                 self.__sock.send(instruct_list[sendFlag])
             except Exception as e:
                 self.__connected = False
@@ -164,38 +153,31 @@ class ShuizhiTcpConnector(Connector, threading.Thread):
                     t = t - index['offset']
                 data = {'c' + str(index['serial_number']): t}
                 self.__storager.real_time_data_storage(data)
-        # print(data)
 
     def SocketReceive(self, clientSocket):
         global sendFlag
         ''' Socket 接收线程。'''
         while 1:
             time.sleep(0.2)
-            # print(sendFlag, time.time())
             try:
                 recvData = clientSocket.recv(1024)
-                # print("recvData=", recvData)
             except Exception as e:
-                print("e=", e)
+                logging.debug(f"Socket receive error:{e}")
                 break
             length = len(recvData)
             if length == 15:
                 fmt = str(length) + 'B'
                 res = struct.unpack(fmt, recvData)
                 t = int_to_hex(res[3], res[4], res[5], res[6])
-                print(time.strftime('%Y-%m-%d %H:%M:%S'), self._param_id[res[12]], "   t=", t)
+                logging.debug(time.strftime('%Y-%m-%d %H:%M:%S'), self._param_id[res[12]], "   t=", t)
                 self.save_format_data(t, self._param_id[res[12]])
                 if sendFlag == self._len_param - 1:
-                    print("-------------------")
+                    logging.debug("-------------------")
                     sendFlag = 0
                 else:
                     sendFlag = sendFlag + 1
         clientSocket.close()
-        self.__log.info("Client closed.")
-
-        # print(time.strftime('%Y-%m-%d %H:%M:%S'), len(recvData))
-        # socket_msg = recvData.decode()  # 将接收到的字节数据转为 string
-        # print("Socket receive: " + socket_msg)
+        logging.info("Client closed.")
 
 
 def int_to_hex(a1, a2, b1, b2):

+ 7 - 14
connectors/tcp_connector.py

@@ -7,8 +7,7 @@ import threading
 import struct
 import socket
 import queue
-import traceback
-from log import Log
+import logging
 from connector import Connector
 from event_storage import EventStorage
 
@@ -16,7 +15,6 @@ from event_storage import EventStorage
 class TcpConnector(Connector, threading.Thread):
     def __init__(self, name, config, converter):
         super().__init__()
-        self.__log = Log()
         self.__sock = None
         self.__connected = False
         self.__stopped = False
@@ -54,12 +52,10 @@ class TcpConnector(Connector, threading.Thread):
         self.__sock.settimeout(10)  # 设置超时时间3mins
         try:
             self.__sock.connect((self.__ip, self.__port))
-            self.__log.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
-            print(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
+            logging.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
             self.__connected = True
         except Exception as e:
-            self.__log.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
-            print(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
+            logging.info(f'Connect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!!')
             self.__connected = False
             self.__reconnect()
 
@@ -74,12 +70,10 @@ class TcpConnector(Connector, threading.Thread):
                 self.__sock.settimeout(10)  # 设置超时时间3mins
                 self.__sock.connect((self.__ip, self.__port))
                 self.__connected = True
-                self.__log.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
-                print(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
+                logging.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] success !')
                 break
             except Exception as e:
-                self.__log.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
-                print(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
+                logging.info(f'Reconnect to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] failed:{e} !!! Continue reconnect in 5s..')
                 self.__connected = False
                 time.sleep(5)
 
@@ -102,7 +96,7 @@ class TcpConnector(Connector, threading.Thread):
             try:
                 self.__sock.send(data.encode(encoding='utf-8'))
             except Exception as e:
-                self.__log.info(f'Send command to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] error:{e}')
+                logging.info(f'Send command to [{self.get_name()}]:[{self.__ip}]:[{self.__port}] error:{e}')
 
     def command_polling(self):
         if self.__connected:
@@ -116,8 +110,7 @@ class TcpConnector(Connector, threading.Thread):
                     if data != "error" and data != 'pass':
                         self.__storager.real_time_data_storage(data)
             except Exception as e:
-                self.__log.error(f'Other error occur [{self.get_name()}]:[{self.__ip}]:[{self.__port}]:{e}')
-                print(f'Other error occur [{self.get_name()}]:[{self.__ip}]:[{self.__port}]:{e}')
+                logging.error(f'Other error occur [{self.get_name()}]:[{self.__ip}]:[{self.__port}]:{e}')
                 time.sleep(5)
                 self.__reconnect()
         else:

+ 8 - 9
converters/adcp_converter.py

@@ -2,8 +2,7 @@
 @Date  :2021/5/21/00219:10:57
 @Desc  :
 """
-import json
-import re
+import logging
 from converter import Converter
 
 
@@ -13,14 +12,14 @@ from converter import Converter
 class AdcpConverter(Converter):
     def convert(self, config, data):
         if data:
-            # print(config)
-            # print(data)
+            # logging.debug(config)
+            # logging.debug(data)
             dict = {}
             try:
                 raw_data = data.decode().split("\r\n")
-                # print(len(raw_data))
+                # logging.debug(len(raw_data))
                 if len(raw_data) == 32:
-                    # print(raw_data)
+                    # logging.debug(raw_data)
                     raw_data = raw_data[1:-1]
                     flow_rate_data = []
                     flow_direction = []
@@ -31,9 +30,9 @@ class AdcpConverter(Converter):
                         flow_rate_data.append(t1[1] / 1000)  # 流速值除以1000
                         flow_direction.append(t1[2] / 10)  # 流向值除以10
                     format_data = flow_rate_data + flow_direction
-                    # print(format_data)
+                    # logging.debug(format_data)
                     j = 0
-                    # print(len(config), len(format_data))
+                    # logging.debug(len(config), len(format_data))
                     for index in config:
                         name = 'c' + str(index['serial_number'])
                         if index['divisor'] is not None:
@@ -48,5 +47,5 @@ class AdcpConverter(Converter):
                 else:
                     return "error"
             except Exception as e:
-                print(e)
+                logging.debug(e)
                 return "error"

+ 6 - 6
converters/nmea0183_converter.py

@@ -2,7 +2,7 @@
 @Date  :2021/5/21/00219:10:57
 @Desc  :
 """
-import re
+import logging
 import binascii
 
 from converter import Converter
@@ -63,13 +63,13 @@ class NEMA0183Converter(Converter):
         data = data.split('*')
         # Splits up the NMEA data by comma
         data = data[0].split(',')
-        # print('len:', len(data), 'data:', data)
+        # logging.debug('len:', len(data), 'data:', data)
         if data[0] == '$PMIRWM':
             for index in config:
                 name = 'c' + str(index['serial_number'])
                 i = int(index['address'])
                 dict[name] = data[i]
-            # print(dict)
+            # logging.debug(dict)
             return dict
 
         # return data[0]
@@ -89,11 +89,11 @@ data = "$PMIRR,20210325,033351.719,0.000,0.000,V,0.00*0F"
 data2 = data.split('*')
 data2 = data2[0].split(',')
 
-print(data2[0][3:6])
+logging.debug(data2[0][3:6])
 
 c = NEMA0183Converter(None)
 d = c.checksum(data)  
-print(d)
+logging.debug(d)
 
-print(c.nmea2utc(data2[1]))
+logging.debug(c.nmea2utc(data2[1]))
 '''

+ 6 - 6
converters/td266_converter.py

@@ -1,6 +1,6 @@
 import json
 import re
-import time
+import logging
 
 from converter import Converter
 
@@ -11,7 +11,7 @@ class TD266Converter(Converter):
         # 去除结尾\r\n: data = b'4420\t1194\t29.823\t104.507\t-7.471\t28.872\t253.153\t9.369\t1.816\t91.491\t-59.593\t100\t9.542\t9.589\t0.015'
         # decode('utf-8'): data = 4420	1194	29.823	104.507	-7.471	28.872	253.153	9.369	1.816	91.491	-59.593	100	9.542	9.589	0.015
         # split('\t'): data = ['4420', '1194', '29.823', '104.507', '-7.471', '28.872', '253.153', '9.369', '1.816', '91.491', '-59.593', '100', '9.542', '9.589', '0.015']
-        # print(len(data), time.strftime('%Y-%m-%d %H:%M:%S'), data)
+        # logging.debug(len(data), time.strftime('%Y-%m-%d %H:%M:%S'), data)
         pattern_start = b"4420"
         # pattern_end = b"\r\n"
         index_start = re.search(pattern_start, data)  # 查找字符串得到开始索引
@@ -21,9 +21,9 @@ class TD266Converter(Converter):
             index_start = index_start.span()[0]
             # index_end = index_end.span()[1]
             data = data[index_start:75]  # 只获取流速和流向,大约取25个字符即可
-            # print(data)
+            # logging.debug(data)
             data = data.decode('utf-8').split('\t')
-            # print(data)
+            # logging.debug(data)
             dict = {}
             try:
                 for index in config:
@@ -33,10 +33,10 @@ class TD266Converter(Converter):
                         dict[name] = float(data[i])
                     else:
                         dict[name] = round((float(data[i]) / index['divisor']), 2)
-                # print(dict)
+                # logging.debug(dict)
                 return dict
             except Exception as e:
-                print(e)
+                logging.debug(e)
                 return "error"
         else:
             return 'pass'

+ 2 - 2
converters/wxt536_converter.py

@@ -1,4 +1,4 @@
-import json
+import logging
 import re
 from converter import Converter
 
@@ -32,5 +32,5 @@ class WXT536Converter(Converter):
                 else:
                     return "error"
             except Exception as e:
-                print(e)
+                logging.debug(e)
                 return "error"

+ 1 - 1
event_storage.py

@@ -8,7 +8,7 @@ from configuration import Configuration
 
 class EventStorage:
     def __init__(self):
-        self.config = Configuration().get_system_config()
+        self.config = Configuration().get_config()
         self.memoryStorage = MemoryStorage(self.config['memoryDatabase'])
         self.hardDiskStorage = HardDiskStorage(self.config['hardDiskdataBase'])
 

+ 10 - 17
gateway.py

@@ -1,12 +1,8 @@
 import asyncio
 import datetime
-import json
 import sys
-import threading
 import time
-
-import win32api
-import wmi
+import logging
 from sanic import Sanic
 from sanic_cors import CORS, cross_origin
 from sanic import response
@@ -18,9 +14,14 @@ from utility import Utility
 from alarm import Alarm
 from historical_data_storage import HistoricalDataStorage
 from hard_disk_storage import HardDiskStorage
-from log import Log
 from api_context import ApiContext
 
+logging.basicConfig(level=logging.DEBUG,
+                    format='[%(asctime)s] - thread:%(thread)d - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s ',
+                    datefmt='%Y-%m-%d %H:%M:%S',
+                    # filename='gateway.log',  # 调式程序时注释掉本行
+                    )
+
 app = Sanic(__name__)
 CORS(app)
 
@@ -179,20 +180,12 @@ async def notify_server_started_after_five_seconds():
 
 
 if __name__ == "__main__":
-    system_config = Configuration().get_system_config()
-    print(system_config)
+    system_config = Configuration().get_config()
     gateway_storage = EventStorage()
     connector_config = gateway_storage.get_connector_config()
-    # is_active = verify_cpu_code()
-    # if is_active:
     Utility.start_connectors(connector_config)
-    alarm1 = Alarm()
-    threading.Thread(target=alarm1.overrun_alarm).start()
-    # threading.Thread(target=alarm2.displacement_alarm).start()
-    historicalDataStorage = HistoricalDataStorage()
-    threading.Thread(target=historicalDataStorage.run).start()
-    # app.add_task(overrun_alarm(app, alarm))
-    # app.add_task(displacement_alarm(app, alarm))
+    Alarm().start()
+    HistoricalDataStorage().start()
     # 气象仪降雨量每日清零:一号打开,二号关闭,三号关闭
     app.add_task(notify_server_started_after_five_seconds())
     app.run(host="0.0.0.0", port=8000)

+ 7 - 6
hard_disk_storage.py

@@ -1,14 +1,14 @@
 import datetime
 import json
+import logging
 
 import openpyxl
 import pymysql
 import traceback
 import time
-from log import Log
 
 
-class HardDiskStorage():
+class HardDiskStorage:
     def __init__(self, config, port=3306, charset='utf8'):
         self.host = config['ip']
         self.user = config['username']
@@ -17,14 +17,15 @@ class HardDiskStorage():
         self.port = port
         self.charset = charset
         self.conn = None
-        self._conn()
-        self.log = Log()
+        if not self._conn(): self._reConn()
 
     def _conn(self):
         try:
             self.conn = pymysql.connect(host=self.host, user=self.user, password=self.passwd, database=self.db, port=self.port, autocommit=True)
+            logging.debug(f'success to connect to {self.host}:{self.port}:{self.db} by [{self.user}:{self.passwd}]')
             return True
         except Exception as e:
+            logging.error(f'failed to connect to {self.host}:{self.port}:{self.db} by [{self.user}:{self.passwd}]:{e}')
             return False
 
     def _reConn(self, num=28800, stime=3):  # 重试连接总次数为1天,这里根据实际情况自己设置,如果服务器宕机1天都没发现就......
@@ -34,8 +35,8 @@ class HardDiskStorage():
             try:
                 self.conn.ping()  # cping 校验连接是否异常
                 _status = False
-            except:
-                if self._conn() == True:  # 重新连接,成功退出
+            except Exception as e:
+                if self._conn():  # 重新连接,成功退出
                     _status = False
                     break
                 _number += 1

+ 5 - 6
historical_data_storage.py

@@ -1,19 +1,18 @@
 import json
 import threading
-
 from event_storage import EventStorage
 import time
-from log import Log
+import logging
 
 
-class HistoricalDataStorage:
+class HistoricalDataStorage(threading.Thread):
     def __init__(self):
+        super(HistoricalDataStorage, self).__init__()
         self._storage = EventStorage()
-        self._log = Log()
 
     # 历史存储主函数
     def run(self):
-        self._log.info('[HistoricalDataStorage] - Historical data storage module is running!')
+        logging.info('Historical data storage module is running!')
         station_info = self._storage.hardDiskStorage.get_connectors()  # 获取所有站点信息
 
         all_devices = []
@@ -68,7 +67,7 @@ class HistoricalDataStorage:
                             if real_time_data[key] == '':  # redis存储的为空值
                                 real_time_data[key] = 'null'
                         table_name = "table_" + str(item['device_name'])  # 根据站名计算表名
-                        # self._log.debug("[HistoricalDataStorage] - " + repr(table_name) + '<-' + repr(real_time_data))
+                        logging.debug(repr(table_name) + '<-' + repr(real_time_data))
                         self._storage.hardDiskStorage.insert_column_many(table_name, save_time, real_time_data)
 
 

+ 0 - 67
log.py

@@ -1,67 +0,0 @@
-import os
-import sys
-import time
-import logging
-import logging.handlers
-import inspect
-
-current_path = os.getcwd()  # 获取当前项目路径
-log_path = os.path.join(current_path, r'gateway-Log')  # 拼接日志文件存储目录
-if not os.path.exists(log_path):  # 不存在则创建日志文件存储目录
-    os.mkdir(log_path)
-# 创建日志等级和文件映射字典
-handlers = {logging.ERROR: os.path.join(log_path, r'log_error.log'),
-            logging.DEBUG: os.path.join(log_path, r'log_debug.log'),
-            logging.INFO: os.path.join(log_path, r'log_info.log')}
-
-
-def createHandlers():
-    logLevels = handlers.keys()
-    for level in logLevels:
-        path = os.path.abspath(handlers[level])
-        # 设定每个日志文件大小,单位B
-        logsize = 1024 * 1024 * 20
-        # 设定保存的日志文件个数
-        lognum = 50
-        handlers[level] = logging.handlers.RotatingFileHandler(path, maxBytes=logsize, backupCount=lognum)
-
-
-# 加载模块时创建全局变量
-createHandlers()
-
-
-class Log(object):
-    '''
-    该日志类可以把不同级别的日志输出到不同的日志文件中
-    '''
-
-    def __init__(self, level=logging.NOTSET):
-        self.__loggers = {}
-        logLevels = handlers.keys()
-        for level in logLevels:
-            logger = logging.getLogger(str(level))
-            # 如果不指定level,获得的handler似乎是同一个handler?
-            logger.addHandler(handlers[level])
-            logger.setLevel(level)
-            self.__loggers.update({level: logger})
-
-    def printfNow(self):
-        return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
-
-    def getLogMessage(self, level, message):
-        frame, filename, lineNo, functionName, code, unknowField = inspect.stack()[2]
-        '''日志格式: [时间] 文件路径-日志级别 [行号]: 具体信息'''
-        res = "[%s] %s-%s [%s]:%s" % (self.printfNow(), filename, level, lineNo, message)
-        return res
-
-    def info(self, message):
-        message = self.getLogMessage("info", message)
-        self.__loggers[logging.INFO].info(message)
-
-    def error(self, message):
-        message = self.getLogMessage("error", message)
-        self.__loggers[logging.ERROR].error(message)
-
-    def debug(self, message):
-        message = self.getLogMessage("debug", message)
-        self.__loggers[logging.DEBUG].debug(message)