mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	Change logging
This commit is contained in:
		
							parent
							
								
									e3da3d483f
								
							
						
					
					
						commit
						0198598a7c
					
				| 
						 | 
					@ -25,11 +25,11 @@ The output should be something like:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   Starting monitoring-daemon-asyncio_monitor_1 ... done
 | 
					   Starting monitoring-daemon-asyncio_monitor_1 ... done
 | 
				
			||||||
   Attaching to monitoring-daemon-asyncio_monitor_1
 | 
					   Attaching to monitoring-daemon-asyncio_monitor_1
 | 
				
			||||||
   monitor_1  | [2020-08-06 01:57:08,249] [INFO] [monitoringdaemon.dispatcher]: Dispatcher is starting up
 | 
					   monitor_1  | [2020-08-08 02:48:24,906] [INFO] [Dispatcher]: Starting up
 | 
				
			||||||
   monitor_1  | [2020-08-06 01:57:08,249] [INFO] [monitoringdaemon.dispatcher]: Monitoring task has been started monitoringdaemon.monitors.HttpMonitor(url="http://example.com")
 | 
					   monitor_1  | [2020-08-08 02:48:24,980] [INFO] [HttpMonitor]: GET http://example.com, response code: 200, content length: 648, request took: 0.072 seconds
 | 
				
			||||||
   monitor_1  | [2020-08-06 01:57:08,249] [INFO] [monitoringdaemon.dispatcher]: Monitoring task has been started monitoringdaemon.monitors.HttpMonitor(url="http://httpbin.org/get")
 | 
					   monitor_1  | [2020-08-08 02:48:25,042] [INFO] [HttpMonitor]: GET https://httpbin.org/get, response code: 200, content length: 310, request took: 0.134 seconds
 | 
				
			||||||
   monitor_1  | [2020-08-06 01:57:08,318] [INFO] [monitoringdaemon.monitors.HttpMonitor(url="http://example.com")]: Response code: 200, content length: 648, request took: 0.067 seconds
 | 
					   monitor_1  | [2020-08-08 02:48:29,991] [INFO] [HttpMonitor]: GET http://example.com, response code: 200, content length: 648, request took: 0.074 seconds
 | 
				
			||||||
   monitor_1  | [2020-08-06 01:57:08,363] [INFO] [monitoringdaemon.monitors.HttpMonitor(url="http://httpbin.org/get")]: Response code: 200, content length: 309, request took: 0.112 seconds
 | 
					   monitor_1  | [2020-08-08 02:48:30,037] [INFO] [HttpMonitor]: GET https://httpbin.org/get, response code: 200, content length: 310, request took: 0.119 seconds
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test
 | 
					Test
 | 
				
			||||||
----
 | 
					----
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
"""Dispatcher module."""
 | 
					""""Dispatcher module."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import asyncio
 | 
					import asyncio
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
| 
						 | 
					@ -9,30 +9,24 @@ from typing import List
 | 
				
			||||||
from .monitors import Monitor
 | 
					from .monitors import Monitor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger = logging.getLogger(__name__)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Dispatcher:
 | 
					class Dispatcher:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, monitors: List[Monitor]) -> None:
 | 
					    def __init__(self, monitors: List[Monitor]) -> None:
 | 
				
			||||||
        self._monitors = monitors
 | 
					        self._monitors = monitors
 | 
				
			||||||
        self._monitor_tasks: List[asyncio.Task] = []
 | 
					        self._monitor_tasks: List[asyncio.Task] = []
 | 
				
			||||||
 | 
					        self._logger = logging.getLogger(self.__class__.__name__)
 | 
				
			||||||
        self._stopping = False
 | 
					        self._stopping = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self) -> None:
 | 
					    def run(self) -> None:
 | 
				
			||||||
        asyncio.run(self.start())
 | 
					        asyncio.run(self.start())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def start(self) -> None:
 | 
					    async def start(self) -> None:
 | 
				
			||||||
        logger.info('Dispatcher is starting up')
 | 
					        self._logger.info('Starting up')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for monitor in self._monitors:
 | 
					        for monitor in self._monitors:
 | 
				
			||||||
            self._monitor_tasks.append(
 | 
					            self._monitor_tasks.append(
 | 
				
			||||||
                asyncio.create_task(self._run_monitor(monitor)),
 | 
					                asyncio.create_task(self._run_monitor(monitor)),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            logger.info(
 | 
					 | 
				
			||||||
                'Monitoring task has been started %s',
 | 
					 | 
				
			||||||
                monitor.full_name,
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        asyncio.get_event_loop().add_signal_handler(signal.SIGTERM, self.stop)
 | 
					        asyncio.get_event_loop().add_signal_handler(signal.SIGTERM, self.stop)
 | 
				
			||||||
        asyncio.get_event_loop().add_signal_handler(signal.SIGINT, self.stop)
 | 
					        asyncio.get_event_loop().add_signal_handler(signal.SIGINT, self.stop)
 | 
				
			||||||
| 
						 | 
					@ -47,11 +41,10 @@ class Dispatcher:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._stopping = True
 | 
					        self._stopping = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        logger.info('Dispatcher is shutting down')
 | 
					        self._logger.info('Shutting down')
 | 
				
			||||||
        for task, monitor in zip(self._monitor_tasks, self._monitors):
 | 
					        for task, monitor in zip(self._monitor_tasks, self._monitors):
 | 
				
			||||||
            task.cancel()
 | 
					            task.cancel()
 | 
				
			||||||
            logger.info('Monitoring task has been stopped %s', monitor.full_name)
 | 
					        self._logger.info('Shutdown finished successfully')
 | 
				
			||||||
        logger.info('Dispatcher shutting down finished successfully')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    async def _run_monitor(monitor: Monitor) -> None:
 | 
					    async def _run_monitor(monitor: Monitor) -> None:
 | 
				
			||||||
| 
						 | 
					@ -67,6 +60,6 @@ class Dispatcher:
 | 
				
			||||||
            except asyncio.CancelledError:
 | 
					            except asyncio.CancelledError:
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            except Exception:
 | 
					            except Exception:
 | 
				
			||||||
                monitor.logger.exception('Error running monitoring check')
 | 
					                monitor.logger.exception('Error executing monitor check')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await asyncio.sleep(_until_next(last=time_start))
 | 
					            await asyncio.sleep(_until_next(last=time_start))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,11 +11,7 @@ class Monitor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, check_every: int) -> None:
 | 
					    def __init__(self, check_every: int) -> None:
 | 
				
			||||||
        self.check_every = check_every
 | 
					        self.check_every = check_every
 | 
				
			||||||
        self.logger = logging.getLogger(self.full_name)
 | 
					        self.logger = logging.getLogger(self.__class__.__name__)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @property
 | 
					 | 
				
			||||||
    def full_name(self) -> str:
 | 
					 | 
				
			||||||
        raise NotImplementedError()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def check(self) -> None:
 | 
					    async def check(self) -> None:
 | 
				
			||||||
        raise NotImplementedError()
 | 
					        raise NotImplementedError()
 | 
				
			||||||
| 
						 | 
					@ -34,10 +30,6 @@ class HttpMonitor(Monitor):
 | 
				
			||||||
        self._timeout = options.pop('timeout')
 | 
					        self._timeout = options.pop('timeout')
 | 
				
			||||||
        super().__init__(check_every=options.pop('check_every'))
 | 
					        super().__init__(check_every=options.pop('check_every'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					 | 
				
			||||||
    def full_name(self) -> str:
 | 
					 | 
				
			||||||
        return '{0}.{1}(url="{2}")'.format(__name__, self.__class__.__name__, self._url)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    async def check(self) -> None:
 | 
					    async def check(self) -> None:
 | 
				
			||||||
        time_start = time.time()
 | 
					        time_start = time.time()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,7 +43,9 @@ class HttpMonitor(Monitor):
 | 
				
			||||||
        time_took = time_end - time_start
 | 
					        time_took = time_end - time_start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.logger.info(
 | 
					        self.logger.info(
 | 
				
			||||||
            'Response code: %s, content length: %s, request took: %s seconds',
 | 
					            '%s %s, response code: %s, content length: %s, request took: %s seconds',
 | 
				
			||||||
 | 
					            self._method,
 | 
				
			||||||
 | 
					            self._url,
 | 
				
			||||||
            response.status,
 | 
					            response.status,
 | 
				
			||||||
            response.content_length,
 | 
					            response.content_length,
 | 
				
			||||||
            round(time_took, 3)
 | 
					            round(time_took, 3)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,7 +56,7 @@ async def test_example_monitor(container, caplog):
 | 
				
			||||||
        await example_monitor.check()
 | 
					        await example_monitor.check()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert 'http://fake-example.com' in caplog.text
 | 
					    assert 'http://fake-example.com' in caplog.text
 | 
				
			||||||
    assert 'Response code: 200' in caplog.text
 | 
					    assert 'response code: 200' in caplog.text
 | 
				
			||||||
    assert 'content length: 635' in caplog.text
 | 
					    assert 'content length: 635' in caplog.text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user