Only cleanups. (0.21.2)
This commit is contained in:
parent
4f30af83db
commit
cef5cea8f7
4 changed files with 4 additions and 158 deletions
4
Makefile
4
Makefile
|
|
@ -34,10 +34,10 @@ help:
|
||||||
# make daemon
|
# make daemon
|
||||||
|
|
||||||
run:
|
run:
|
||||||
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc
|
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector ./etc
|
||||||
|
|
||||||
rundev:
|
rundev:
|
||||||
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc.test.local
|
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector ./etc.test.local
|
||||||
|
|
||||||
daemon:
|
daemon:
|
||||||
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VRESION)/site-packages/ bin/linspector -d ./etc
|
PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VRESION)/site-packages/ bin/linspector -d ./etc
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ from linspector.linspector import Linspector
|
||||||
from linspector.monitors import Monitors
|
from linspector.monitors import Monitors
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
__version__ = '0.21.1'
|
__version__ = '0.21.2'
|
||||||
__author__ = 'Johannes Findeisen <you@hanez.org>'
|
__author__ = 'Johannes Findeisen <you@hanez.org>'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,12 +39,6 @@ def parse_args():
|
||||||
parser.add_argument('-r', '--restart', default=False, dest='restart', action='store_true',
|
parser.add_argument('-r', '--restart', default=False, dest='restart', action='store_true',
|
||||||
help='restart the daemon if it is running (default: false)')
|
help='restart the daemon if it is running (default: false)')
|
||||||
|
|
||||||
parser.add_argument('-s', '--stdout', default=False, dest='stdout', action='store_true',
|
|
||||||
help='log to stdout')
|
|
||||||
|
|
||||||
parser.add_argument('-V', '--verbose', default=False, dest='verbose', action='store_true',
|
|
||||||
help='log in debug mode')
|
|
||||||
|
|
||||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + str(__version__))
|
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + str(__version__))
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
|
||||||
|
|
@ -1,148 +0,0 @@
|
||||||
"""
|
|
||||||
This file is part of Linspector (https://linspector.org/)
|
|
||||||
Copyright (c) 2022 Johannes Findeisen <you@hanez.org>. All Rights Reserved.
|
|
||||||
See LICENSE (MIT license).
|
|
||||||
"""
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from logging import getLogger
|
|
||||||
from logging import handlers
|
|
||||||
|
|
||||||
logger = getLogger('linspector')
|
|
||||||
|
|
||||||
|
|
||||||
# wow, this is not process capable! i thought in a last commit that the problem ist fixed, but it
|
|
||||||
# isn't!!! see here for more details:
|
|
||||||
# https://docs.python.org/3/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes
|
|
||||||
# i think the native pythonic way should be used as described in the link above.
|
|
||||||
# a different approach on handling this can be to use a exclusive log file for each process but
|
|
||||||
# this is not what i want. maybe these links could be helpful too:
|
|
||||||
# https://pypi.org/project/multiprocessing-logging/
|
|
||||||
# https://stackoverflow.com/questions/641420/how-should-i-log-while-using-multiprocessing-in-python/48668567
|
|
||||||
# or i can log to one single file using stdout data and let the operating system do the file
|
|
||||||
# rotation but if the pythonic way works fine i should implement it directly in Linspector.
|
|
||||||
# more stuff:
|
|
||||||
# https://pythondjangorestapi.com/python-logging-the-ultimate-guide-to-logging/
|
|
||||||
# and now i found another libray for handling this, but it would make Linspector depending on the
|
|
||||||
# next 3rd party library in the core (need to discover features because i want log rotating):
|
|
||||||
# https://pypi.org/project/loguru/
|
|
||||||
# maybe subclass it from logging.Logger...?
|
|
||||||
# TODO: Make the logging format using key=value pairs to make it easy to evaluate log data using
|
|
||||||
# Splunk.
|
|
||||||
# TODO: Make logging possible to syslog! Maybe not implement it here and just use the syslog task
|
|
||||||
# with a format optimized for Splunk or create a Splunk task for this.
|
|
||||||
class Log:
|
|
||||||
def __init__(self, configuration, stdout, verbose):
|
|
||||||
self.__configuration = configuration
|
|
||||||
self.__stdout = stdout
|
|
||||||
self.__verbose = verbose
|
|
||||||
|
|
||||||
if stdout:
|
|
||||||
if verbose:
|
|
||||||
self.set_level(logging.DEBUG)
|
|
||||||
else:
|
|
||||||
# setting pre initialization default log level to INFO. this changes after
|
|
||||||
# initialization of the configuration. maybe there are better solutions...?
|
|
||||||
self.set_level(logging.INFO)
|
|
||||||
|
|
||||||
# some information but not sure if useful in Linspector:
|
|
||||||
# https://stackoverflow.com/questions/919897/how-to-obtain-a-thread-id-in-python
|
|
||||||
# %(thread)d : Thread ID (if available).
|
|
||||||
# %(threadName)s : Thread name (if available).
|
|
||||||
# this works also for processName
|
|
||||||
stdout_formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] '
|
|
||||||
'%(message)s')
|
|
||||||
stdout_handler = logging.StreamHandler(sys.stdout)
|
|
||||||
stdout_handler.setFormatter(stdout_formatter)
|
|
||||||
self.add_handler(stdout_handler)
|
|
||||||
|
|
||||||
if configuration.get_option('linspector', 'log_file'):
|
|
||||||
log_file = os.path.expanduser(configuration.get_option('linspector', 'log_file'))
|
|
||||||
if not os.path.exists(os.path.dirname(log_file)):
|
|
||||||
os.makedirs(os.path.dirname(log_file))
|
|
||||||
|
|
||||||
log_file_formatter = \
|
|
||||||
logging.Formatter('[%(asctime)s]:[%(levelname)s]:[%(name)s]:%(message)s')
|
|
||||||
|
|
||||||
if configuration.get_option('linspector', 'log_file_size'):
|
|
||||||
log_file_size_mb = int(configuration.get_option('linspector', 'log_file_size'))
|
|
||||||
log_file_size_bytes = int(log_file_size_mb * 1000000)
|
|
||||||
elif configuration.get_option('linspector', 'log_file_size_bytes'):
|
|
||||||
log_file_size_bytes = int(configuration.get_option('linspector',
|
|
||||||
'log_file_size_bytes'))
|
|
||||||
else:
|
|
||||||
# default log file size is 10000000 bytes (10MiB)
|
|
||||||
log_file_size_bytes = int(10000000)
|
|
||||||
|
|
||||||
if configuration.get_option('linspector', 'log_file_count'):
|
|
||||||
log_file_count = int(configuration.get_option('linspector', 'log_file_count'))
|
|
||||||
else:
|
|
||||||
# default log file count is 1.
|
|
||||||
log_file_count = 1
|
|
||||||
|
|
||||||
log_file_handler = logging.handlers.RotatingFileHandler(log_file,
|
|
||||||
maxBytes=log_file_size_bytes,
|
|
||||||
backupCount=log_file_count)
|
|
||||||
|
|
||||||
log_file_handler.setFormatter(log_file_formatter)
|
|
||||||
self.add_handler(log_file_handler)
|
|
||||||
|
|
||||||
log_level = 'None'
|
|
||||||
# critical errors will always show up even when no log_level is set. this is most silent.
|
|
||||||
self.set_level(logging.CRITICAL)
|
|
||||||
if configuration.get_option('linspector', 'log_level'):
|
|
||||||
log_level = str(configuration.get_option('linspector', 'log_level'))
|
|
||||||
if log_level == "error":
|
|
||||||
self.set_level(logging.ERROR)
|
|
||||||
elif log_level == "warning":
|
|
||||||
self.set_level(logging.WARNING)
|
|
||||||
elif log_level == "info":
|
|
||||||
self.set_level(logging.INFO)
|
|
||||||
elif log_level == "debug":
|
|
||||||
self.set_level(logging.DEBUG)
|
|
||||||
# elif configuration.get_option('linspector', 'log_level') != 'error' != 'warning' \
|
|
||||||
# != 'info' != 'debug':
|
|
||||||
# logger.warning('[linspector] log level: "' + log_level + '" not found!')
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def add_handler(handler):
|
|
||||||
logger.addHandler(handler)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def critical(msg):
|
|
||||||
logger.critical(str(msg))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def debug(msg):
|
|
||||||
# only use inspect when log level NOTSET or DEBUG is enabled.
|
|
||||||
if logger.isEnabledFor(0) or logger.isEnabledFor(10):
|
|
||||||
import inspect
|
|
||||||
import multiprocessing
|
|
||||||
import threading
|
|
||||||
# https://www.geeksforgeeks.org/how-to-get-the-process-id-from-python-multiprocess/
|
|
||||||
current_process = multiprocessing.current_process()
|
|
||||||
from_stack = inspect.stack()[1]
|
|
||||||
function_name = from_stack.function
|
|
||||||
line_number = str(from_stack.lineno)
|
|
||||||
module_name = inspect.getmodule(from_stack[0]).__name__
|
|
||||||
logger.debug('[' + str(current_process.name) + ']:[' + str(threading.get_ident()) +
|
|
||||||
']:[' + str(threading.get_native_id()) + '] [' + module_name + ']:[' +
|
|
||||||
function_name + ']:[' + line_number + '] ' + str(msg))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def error(msg):
|
|
||||||
logger.error(str(msg))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def info(msg):
|
|
||||||
logger.info(str(msg))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def warning(msg):
|
|
||||||
logger.warning(str(msg))
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def set_level(level):
|
|
||||||
logger.setLevel(level)
|
|
||||||
|
|
@ -21,7 +21,7 @@ class IsConnectedService(Service):
|
||||||
|
|
||||||
def execute(self, identifier, monitor, service, **kwargs):
|
def execute(self, identifier, monitor, service, **kwargs):
|
||||||
self.__log.debug('identifier=' + identifier +
|
self.__log.debug('identifier=' + identifier +
|
||||||
'service=' + service +
|
' service=' + service +
|
||||||
' object=' + str(self) +
|
' object=' + str(self) +
|
||||||
' kwargs=' + str(kwargs))
|
' kwargs=' + str(kwargs))
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue