1
0
mirror of https://github.com/thingsboard/thingsboard-gateway synced 2025-10-26 22:31:42 +08:00

Added errors count resetting every 60 sec

This commit is contained in:
samson0v 2024-05-14 08:33:45 +03:00
parent 6863d008bd
commit 9056bf9a1c
16 changed files with 44 additions and 19 deletions

View File

@ -111,7 +111,7 @@ class BACnetConnector(Thread, Connector):
def close(self):
self.__stopped = True
self.__connected = False
self._log.reset()
self._log.stop()
self._application.mux.directPort.connected = False
self._application.mux.directPort.accepting = False

View File

@ -106,7 +106,7 @@ class BLEConnector(Connector, Thread):
self.__devices = []
self.__log.info('%s has been stopped.', self.get_name())
self.__log.reset()
self.__log.stop()
def get_name(self):
return self.name

View File

@ -101,7 +101,7 @@ class CanConnector(Connector, Thread):
if not self.__stopped:
self.__stopped = True
self._log.debug("[%s] Stopping", self.get_name())
self._log.reset()
self._log.stop()
def get_name(self):
return self.name

View File

@ -189,7 +189,7 @@ class FTPConnector(Connector, Thread):
def close(self):
self.__stopped = True
self.__log.info('FTP Connector stopped.')
self.__log.reset()
self.__log.stop()
def get_name(self):
return self.name

View File

@ -343,7 +343,7 @@ class ModbusConnector(Connector, Thread):
# self.__slave_thread.join()
self.__log.info('%s has been stopped.', self.get_name())
self.__log.reset()
self.__log.stop()
self.__stopping = False
def get_name(self):

View File

@ -341,7 +341,7 @@ class MqttConnector(Connector, Thread):
for worker in self.__workers_thread_pool:
worker.stop()
self.__log.info('%s has been stopped.', self.get_name())
self.__log.reset()
self.__log.stop()
def get_name(self):
return self.name

View File

@ -220,7 +220,7 @@ class OcppConnector(Connector, Thread):
self.__loop.stop()
self._log.info('%s has been stopped.', self.get_name())
self._log.reset()
self._log.stop()
def get_id(self):
return self.__id

View File

@ -94,7 +94,7 @@ class OdbcConnector(Connector, Thread):
if not self.__stopped:
self.__stopped = True
self._log.debug("[%s] Stopping", self.get_name())
self._log.reset()
self._log.stop()
def get_id(self):
return self.__id

View File

@ -244,7 +244,7 @@ class OpcUaConnector(Thread, Connector):
pass
self.__connected = False
self._log.info('%s has been stopped.', self.get_name())
self._log.reset()
self._log.stop()
def get_id(self):
return self.__id

View File

@ -104,7 +104,7 @@ class OpcUaConnectorAsyncIO(Connector, Thread):
self.__stopped = True
self.__connected = False
self.__log.info('%s has been stopped.', self.get_name())
self.__log.reset()
self.__log.stop()
async def __reset_node(self, node):
node['valid'] = False

View File

@ -322,7 +322,7 @@ class RequestConnector(Connector, Thread):
def close(self):
self.__stopped = True
self._log.reset()
self._log.stop()
def get_config(self):
return self.__config

View File

@ -200,7 +200,7 @@ class RESTConnector(Connector, Thread):
if not self._loop.is_closed():
self._loop.call_soon_threadsafe(self._loop.stop)
self.__log.info('REST connector stopped.')
self.__log.reset()
self.__log.stop()
self.join()
def get_id(self):

View File

@ -311,7 +311,7 @@ class SocketConnector(Connector, Thread):
pass # Ignore errors when socket is already closed
self.__socket.close()
sleep(0.01)
self.__log.reset()
self.__log.stop()
def get_name(self):
return self.name

View File

@ -203,7 +203,7 @@ class XMPPConnector(Connector, Thread):
self.__stopped = True
self._connected = False
self.__log.info('%s has been stopped.', self.get_name())
self.__log.reset()
self.__log.stop()
def get_id(self):
return self.__id

View File

@ -159,7 +159,7 @@ class CustomSerialConnector(Thread, Connector): # Define a connector class, it
self.__gateway.del_device(self.__devices[device]["device_config"]["name"])
if self.__devices[device]['serial'].isOpen():
self.__devices[device]['serial'].close()
self._log.reset()
self._log.stop()
def on_attributes_update(self, content): # Function used for processing attribute update requests from ThingsBoard
self._log.debug(content)

View File

@ -13,7 +13,7 @@
# limitations under the License.
import logging
from time import sleep
from time import sleep, time
from threading import Thread
@ -51,24 +51,38 @@ def init_logger(gateway, name, level, enable_remote_logging=False):
class TbLogger(logging.Logger):
ALL_ERRORS_COUNT = 0
IS_ALL_ERRORS_COUNT_RESET = False
RESET_ERRORS__PERIOD = 60
def __init__(self, name, gateway=None, level=logging.NOTSET):
super(TbLogger, self).__init__(name=name, level=level)
self.propagate = True
self.parent = self.root
self._gateway = gateway
self._stopped = False
self.errors = 0
self.attr_name = self.name + '_ERRORS_COUNT'
self._is_on_init_state = True
if self._gateway:
self._send_errors_thread = Thread(target=self._send_errors, name='Send Errors Thread', daemon=True)
self._send_errors_thread = Thread(target=self._send_errors, name='[LOGGER] Send Errors Thread', daemon=True)
self._send_errors_thread.start()
self._start_time = time()
self._reset_errors_thread = Thread(target=self._reset_errors_timer, name='[LOGGER] Reset Errors Thread',
daemon=True)
self._reset_errors_thread.start()
def reset(self):
"""
!!!Need to be called manually in the connector 'close' method!!!
"""
TbLogger.ALL_ERRORS_COUNT = TbLogger.ALL_ERRORS_COUNT - self.errors
if TbLogger.ALL_ERRORS_COUNT > 0 and self.errors > 0:
TbLogger.ALL_ERRORS_COUNT = TbLogger.ALL_ERRORS_COUNT - self.errors
self.errors = 0
self._send_error_count()
def stop(self):
self.reset()
self._stopped = True
@property
def gateway(self):
@ -94,21 +108,32 @@ class TbLogger(logging.Logger):
TbLogger.IS_ALL_ERRORS_COUNT_RESET = True
self._is_on_init_state = False
def _reset_errors_timer(self):
while not self._stopped:
if time() - self._start_time >= TbLogger.RESET_ERRORS__PERIOD:
self.reset()
self._start_time = time()
sleep(1)
def error(self, msg, *args, **kwargs):
kwargs['stacklevel'] = 2
super(TbLogger, self).error(msg, *args, **kwargs)
self._add_error()
self._send_error_count()
def exception(self, msg, *args, **kwargs) -> None:
attr_name = kwargs.pop('attr_name', None)
kwargs['stacklevel'] = 2
super(TbLogger, self).exception(msg, *args, **kwargs)
self._add_error()
self._send_error_count(error_attr_name=attr_name)
def _send_error_count(self, error_attr_name=None):
def _add_error(self):
TbLogger.ALL_ERRORS_COUNT += 1
self.errors += 1
def _send_error_count(self, error_attr_name=None):
while self._is_on_init_state:
sleep(.2)