mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-14 18:40:52 +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