Migrated to Loguru for logging and set up basic configuration, but it still needs adjustments. (0.21)

This commit is contained in:
Johannes Findeisen 2023-02-23 19:06:53 +01:00
commit 5843f4358f
4 changed files with 58 additions and 43 deletions

View file

@ -36,5 +36,8 @@ help:
run:
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc
rundev:
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc.local
daemon:
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VRESION)/site-packages/ bin/linspector -d ./etc

View file

@ -72,12 +72,12 @@ See TODO for internal tasks.
Currently, the Linspector core requires the following 3rd party libraries:
- [APScheduler](https://github.com/agronholm/apscheduler)- Apscheduler is the scheduler used in
- [APScheduler](https://pypi.org/project/APScheduler/)- Apscheduler is the scheduler used in
Linspector for the execution of monitors. I started
to use this library in very early versions of Linspector in 2011. Since the main task
in Linspector is the execution of jobs in regularly intervals I believe it is the right
decision to make use of APScheduler directly in the core of the Linspector project.
- [Loguru](https://github.com/Delgan/loguru) - Linspector uses Loguru for file based logging. Loguru is a library
- [Loguru](https://pypi.org/project/loguru/) - Linspector uses Loguru for file based logging. Loguru is a library
which aims to bring enjoyable logging in Python.
### Other used libraries
@ -131,8 +131,7 @@ scheme (See: [https://semver.org/](https://semver.org/)):
- 15.10 - Date based release
- 23 - Serial release
(More
information: [https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#choosing-a-versioning-scheme](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#choosing-a-versioning-scheme) &
(More information: [https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#choosing-a-versioning-scheme](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#choosing-a-versioning-scheme) &
[https://peps.python.org/pep-0440/#public-version-identifiers](https://peps.python.org/pep-0440/#public-version-identifiers))
### Configuration file rules

View file

@ -14,10 +14,10 @@ import sys
from linspector.configuration import Configuration
from linspector.environment import Environment
from linspector.linspector import Linspector
from linspector.logger import Log
from linspector.monitors import Monitors
from loguru import logger
__version__ = '0.20.5'
__version__ = '0.21'
__author__ = 'Johannes Findeisen <you@hanez.org>'
@ -62,49 +62,61 @@ def main():
tasks = {}
try:
configuration = Configuration(args.configuration_path)
configuration = Configuration(args.configuration_path, logger)
except Exception as err:
print('[linspector] configuration error: {0}'.format(err))
logger.error('configuration error: {0}'.format(err))
sys.exit(1)
log = Log(configuration, args.stdout, args.verbose)
environment = Environment(log)
logger.remove()
log_level = "ERROR"
if configuration.get_option('linspector', 'log_level'):
log_level = configuration.get_option('linspector', 'log_level')
logger.add(sys.stderr, backtrace=True, colorize=True, diagnose=True, level=log_level)
# log.add(sys.stderr, backtrace=True, colorize=True, diagnose=True, format="{time} [{level}]: {message}", level="INFO")
# log.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
if configuration.get_option('linspector', 'logfile'):
logger.add(configuration.get_option('linspector', 'logfile'), backtrace=True, diagnose=True, enqueue=True,
level=configuration.get_option('linspector', 'logfile_level'))
environment = Environment(logger)
try:
monitors = Monitors(configuration, environment, log, notifications, services, tasks)
monitors = Monitors(configuration, environment, logger, notifications, services, tasks)
except Exception as err:
log.warning('[linspector] monitor initialization error: {0}'.format(err))
logger.warning('monitor initialization error: {0}'.format(err))
try:
linspector = Linspector(configuration, environment, log, monitors, plugins, scheduler)
linspector = Linspector(configuration, environment, logger, monitors, plugins, scheduler)
# linspector.print_debug()
except Exception as err:
log.critical('[linspector] core initialization error: {0}'.format(err))
logger.critical('core initialization error: {0}'.format(err))
logger.critical('program terminating...')
sys.exit(1)
# daemon initialization
if args.daemon:
try:
from linspector.linspectord import Linspectord
linspectord = Linspectord(configuration, environment, linspector, log)
linspectord = Linspectord(configuration, environment, linspector, logger)
# do handling of restart, start and stop commands but for now "start" is enough... ;)
if args.kill:
log.info('[linspector] stopping daemon.')
logger.info('stopping daemon.')
linspectord.stop()
elif args.restart:
log.info('[linspector] restarting daemon.')
logger.info('restarting daemon.')
linspectord.restart()
else:
log.info('[linspector] starting daemon.')
logger.info('starting daemon.')
linspectord.start()
except Exception as err:
log.critical('[linspector] daemon error: {0}'.format(err))
logger.critical('daemon error: {0}'.format(err))
sys.exit(1)
else:
try:
signal.pause()
except KeyboardInterrupt:
log.info('[linspector] program terminated by user!')
logger.info('program terminated by user!')
if __name__ == '__main__':

View file

@ -11,9 +11,10 @@ import os
# TODO: check for all required configuration options and set defaults if needed. do this only for
# options in the "linspector" section of linspector.ini.
class Configuration:
def __init__(self, configuration_path):
def __init__(self, configuration_path, log):
self.__configuration = configparser.ConfigParser()
self.__configuration_path = configuration_path
self.__log = log
# print('[linspector] reading configuration file: ' + configuration_path +
# '/linspector.conf')