mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
CPU optimizartion work 2 #1144
This commit is contained in:
@@ -93,6 +93,7 @@ def main ():
|
|||||||
mylog('debug', '[MAIN] Starting loop')
|
mylog('debug', '[MAIN] Starting loop')
|
||||||
|
|
||||||
all_plugins = None
|
all_plugins = None
|
||||||
|
pm = None
|
||||||
|
|
||||||
# -- SETTINGS BACKWARD COMPATIBILITY START --
|
# -- SETTINGS BACKWARD COMPATIBILITY START --
|
||||||
# rename settings that have changed names due to code cleanup or migration to plugins
|
# rename settings that have changed names due to code cleanup or migration to plugins
|
||||||
@@ -102,10 +103,7 @@ def main ():
|
|||||||
while True:
|
while True:
|
||||||
|
|
||||||
# re-load user configuration and plugins
|
# re-load user configuration and plugins
|
||||||
all_plugins, imported = importConfigs(db, all_plugins)
|
pm, all_plugins, imported = importConfigs(pm, db, all_plugins)
|
||||||
|
|
||||||
# initiate plugin manager
|
|
||||||
pm = plugin_manager(db, all_plugins)
|
|
||||||
|
|
||||||
# update time started
|
# update time started
|
||||||
conf.loop_start_time = timeNowTZ()
|
conf.loop_start_time = timeNowTZ()
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ def update_or_append(settings_list, item_tuple, key):
|
|||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
def importConfigs (db, all_plugins):
|
def importConfigs (pm, db, all_plugins):
|
||||||
|
|
||||||
sql = db.sql
|
sql = db.sql
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ def importConfigs (db, all_plugins):
|
|||||||
|
|
||||||
if (fileModifiedTime == conf.lastImportedConfFile) and all_plugins is not None:
|
if (fileModifiedTime == conf.lastImportedConfFile) and all_plugins is not None:
|
||||||
mylog('debug', ['[Import Config] skipping config file import'])
|
mylog('debug', ['[Import Config] skipping config file import'])
|
||||||
return all_plugins, False
|
return pm, all_plugins, False
|
||||||
|
|
||||||
# Header
|
# Header
|
||||||
updateState("Import config", showSpinner = True)
|
updateState("Import config", showSpinner = True)
|
||||||
@@ -413,6 +413,7 @@ def importConfigs (db, all_plugins):
|
|||||||
|
|
||||||
# run plugins that are modifying the config
|
# run plugins that are modifying the config
|
||||||
pm = plugin_manager(db, all_plugins)
|
pm = plugin_manager(db, all_plugins)
|
||||||
|
pm.clear_cache()
|
||||||
pm.run_plugin_scripts('before_config_save')
|
pm.run_plugin_scripts('before_config_save')
|
||||||
|
|
||||||
# Used to determine the next import
|
# Used to determine the next import
|
||||||
@@ -431,7 +432,7 @@ def importConfigs (db, all_plugins):
|
|||||||
# front end app log loggging
|
# front end app log loggging
|
||||||
write_notification(msg, 'info', timeNowTZ())
|
write_notification(msg, 'info', timeNowTZ())
|
||||||
|
|
||||||
return all_plugins, True
|
return pm, all_plugins, True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,29 @@ class plugin_manager:
|
|||||||
self.db = db
|
self.db = db
|
||||||
self.all_plugins = all_plugins
|
self.all_plugins = all_plugins
|
||||||
|
|
||||||
|
# object cache of settings and schedules for faster lookups
|
||||||
|
self._cache = {}
|
||||||
|
self._build_cache()
|
||||||
|
|
||||||
# Make sure log level is initialized correctly
|
# Make sure log level is initialized correctly
|
||||||
Logger(get_setting_value('LOG_LEVEL'))
|
Logger(get_setting_value('LOG_LEVEL'))
|
||||||
|
|
||||||
|
def _build_cache(self):
|
||||||
|
"""Build a cache of settings and schedules for faster lookups."""
|
||||||
|
self._cache["settings"] = {
|
||||||
|
p["unique_prefix"]: {
|
||||||
|
"RUN": get_plugin_setting_obj(p, "RUN"),
|
||||||
|
"CMD": get_plugin_setting_obj(p, "CMD"),
|
||||||
|
}
|
||||||
|
for p in self.all_plugins
|
||||||
|
}
|
||||||
|
self._cache["schedules"] = {s.service: s for s in conf.mySchedules}
|
||||||
|
|
||||||
|
def clear_cache(self):
|
||||||
|
"""Force rebuild of the cache (e.g. after config reload)."""
|
||||||
|
self._cache = {}
|
||||||
|
self._build_cache()
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
def run_plugin_scripts(self, runType):
|
def run_plugin_scripts(self, runType):
|
||||||
|
|
||||||
@@ -43,34 +63,65 @@ class plugin_manager:
|
|||||||
shouldRun = False
|
shouldRun = False
|
||||||
prefix = plugin["unique_prefix"]
|
prefix = plugin["unique_prefix"]
|
||||||
|
|
||||||
set = get_plugin_setting_obj(plugin, "RUN")
|
# 🔹 Lookup RUN setting from cache instead of calling get_plugin_setting_obj each time
|
||||||
|
run_setting = self._cache["settings"].get(prefix, {}).get("RUN")
|
||||||
|
|
||||||
|
# set = get_plugin_setting_obj(plugin, "RUN")
|
||||||
|
|
||||||
# mylog('debug', [f'[run_plugin_scripts] plugin: {plugin}'])
|
# mylog('debug', [f'[run_plugin_scripts] plugin: {plugin}'])
|
||||||
# mylog('debug', [f'[run_plugin_scripts] set: {set}'])
|
# mylog('debug', [f'[run_plugin_scripts] set: {set}'])
|
||||||
if set != None and set['value'] == runType:
|
# if set != None and set['value'] == runType:
|
||||||
|
# if runType != "schedule":
|
||||||
|
# shouldRun = True
|
||||||
|
# elif runType == "schedule":
|
||||||
|
# # run if overdue scheduled time
|
||||||
|
# # check schedules if any contains a unique plugin prefix matching the current plugin
|
||||||
|
# for schd in conf.mySchedules:
|
||||||
|
# if schd.service == prefix:
|
||||||
|
# # Check if schedule overdue
|
||||||
|
# shouldRun = schd.runScheduleCheck()
|
||||||
|
if run_setting != None and run_setting['value'] == runType:
|
||||||
if runType != "schedule":
|
if runType != "schedule":
|
||||||
shouldRun = True
|
shouldRun = True
|
||||||
elif runType == "schedule":
|
elif runType == "schedule":
|
||||||
# run if overdue scheduled time
|
# run if overdue scheduled time
|
||||||
# check schedules if any contains a unique plugin prefix matching the current plugin
|
# 🔹 Lookup schedule from cache instead of scanning conf.mySchedules
|
||||||
for schd in conf.mySchedules:
|
schd = self._cache["schedules"].get(prefix)
|
||||||
if schd.service == prefix:
|
if schd:
|
||||||
# Check if schedule overdue
|
# Check if schedule overdue
|
||||||
shouldRun = schd.runScheduleCheck()
|
shouldRun = schd.runScheduleCheck()
|
||||||
|
|
||||||
|
# if shouldRun:
|
||||||
|
# # Header
|
||||||
|
# updateState(f"Plugin: {prefix}")
|
||||||
|
|
||||||
|
# print_plugin_info(plugin, ['display_name'])
|
||||||
|
# mylog('debug', ['[Plugins] CMD: ', get_plugin_setting_obj(plugin, "CMD")["value"]])
|
||||||
|
# execute_plugin(self.db, self.all_plugins, plugin)
|
||||||
|
# # update last run time
|
||||||
|
# if runType == "schedule":
|
||||||
|
# for schd in conf.mySchedules:
|
||||||
|
# if schd.service == prefix:
|
||||||
|
# # note the last time the scheduled plugin run was executed
|
||||||
|
# schd.last_run = timeNowTZ()
|
||||||
if shouldRun:
|
if shouldRun:
|
||||||
# Header
|
# Header
|
||||||
updateState(f"Plugin: {prefix}")
|
updateState(f"Plugin: {prefix}")
|
||||||
|
|
||||||
print_plugin_info(plugin, ['display_name'])
|
print_plugin_info(plugin, ['display_name'])
|
||||||
mylog('debug', ['[Plugins] CMD: ', get_plugin_setting_obj(plugin, "CMD")["value"]])
|
|
||||||
|
# 🔹 CMD also retrieved from cache
|
||||||
|
cmd_setting = self._cache["settings"].get(prefix, {}).get("CMD")
|
||||||
|
mylog('debug', ['[Plugins] CMD: ', cmd_setting["value"] if cmd_setting else None])
|
||||||
|
|
||||||
execute_plugin(self.db, self.all_plugins, plugin)
|
execute_plugin(self.db, self.all_plugins, plugin)
|
||||||
# update last run time
|
|
||||||
|
# update last run time
|
||||||
if runType == "schedule":
|
if runType == "schedule":
|
||||||
for schd in conf.mySchedules:
|
schd = self._cache["schedules"].get(prefix)
|
||||||
if schd.service == prefix:
|
if schd:
|
||||||
# note the last time the scheduled plugin run was executed
|
# note the last time the scheduled plugin run was executed
|
||||||
schd.last_run = timeNowTZ()
|
schd.last_run = timeNowTZ()
|
||||||
|
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
# Handling of user initialized front-end events
|
# Handling of user initialized front-end events
|
||||||
|
|||||||
Reference in New Issue
Block a user