Some more scheduling config stuff in core/linspector.py.

This commit is contained in:
Johannes Findeisen 2022-10-03 05:28:30 +02:00
commit 118445404f
4 changed files with 26 additions and 9 deletions

View file

@ -34,7 +34,7 @@ from linspector.core.monitors import Monitors
# i currently only increase the 3rd number because the goal is that 0.19 will become the first # i currently only increase the 3rd number because the goal is that 0.19 will become the first
# stable version. # stable version.
__version__ = '0.19.21.dev1' __version__ = '0.19.22.dev1'
__author__ = 'Johannes Findeisen <you@hanez.org>' __author__ = 'Johannes Findeisen <you@hanez.org>'
logger = logging.getLogger('linspector') logger = logging.getLogger('linspector')

View file

@ -23,6 +23,12 @@ run_mode = cron
members = superadmin@example.com,developers@example.com members = superadmin@example.com,developers@example.com
; scheduler configuration ; scheduler configuration
start_scheduler = true start_scheduler = true
; the mode the scheduler should run. options are, process or thread. default is the thread mode. process mode will run
; multiple processes, thread mode will run only one process with multiple threads. maybe this can be combined to run
; multiple processes with multiple threads... dont know this actually but reading the APScheduler documentation will
; explain this.... :) default is "thread" but Linspector will only run on one CPU core then. default threads are 1024
; but this can be set much higher here.
scheduler_mode = process
max_threads = 3500 max_threads = 3500
; i recommend to set this to your number of cpu cores available when running on a dedicated linspector host. but if the ; i recommend to set this to your number of cpu cores available when running on a dedicated linspector host. but if the
; system is running other services you should lower this value when you have too high cpu load. ; system is running other services you should lower this value when you have too high cpu load.

View file

@ -25,7 +25,7 @@ class Configuration:
self.__configuration.read(configuration_path + '/linspector.conf', 'utf-8') self.__configuration.read(configuration_path + '/linspector.conf', 'utf-8')
except Exception as err: except Exception as err:
raise Exception('something went wrong reading the configuration file ' raise Exception('something went wrong reading the configuration file '
'linspector.ini in the configuration root path! ({0})'.format(err)) 'linspector.conf in the configuration root path! ({0})'.format(err))
else: else:
raise FileNotFoundError("configuration file linspector.ini not found in configuration " raise FileNotFoundError("configuration file linspector.ini not found in configuration "
"root path!") "root path!")

View file

@ -45,14 +45,25 @@ class Linspector:
jobstores = { jobstores = {
'memory': MemoryJobStore() 'memory': MemoryJobStore()
} }
executors = { if configuration.get_option('linspector', 'max_threads') and not \
'default': ThreadPoolExecutor(int(configuration.get_option('linspector', configuration.get_option('linspector', 'scheduler_mode') == 'process':
'max_threads'))), executors = {
#'default': ProcessPoolExecutor(int(configuration.get_option('linspector', 'default': ThreadPoolExecutor(int(configuration.get_option('linspector',
# 'max_processes'))) 'max_threads')))
} }
else:
executors = {
'default': ThreadPoolExecutor(1024)
}
if configuration.get_option('linspector', 'scheduler_mode'):
if configuration.get_option('linspector', 'scheduler_mode') == 'process':
executors = {
'default': ProcessPoolExecutor(int(configuration.get_option('linspector',
'max_processes')))
}
job_defaults = { job_defaults = {
'max_instances': 10000 # every scheduler job (monitor) must only exist once.
'max_instances': 1
} }
self.__scheduler['linspector'] = BackgroundScheduler(jobstores=jobstores, self.__scheduler['linspector'] = BackgroundScheduler(jobstores=jobstores,
executors=executors, executors=executors,