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:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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): | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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): | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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!!! | ||||
|         """ | ||||
|         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) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 samson0v
					samson0v