further advanced state api and stream checks
This commit is contained in:
@@ -12,7 +12,7 @@ from backend import app, main_logger
|
||||
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
|
||||
from backend.cron.cron_state_checker import recorder_checker
|
||||
from backend.cron.cron_state_checker import async_cron_recorder_checker
|
||||
from backend.websocket.handlers import send_state_update_to_recorders
|
||||
|
||||
cron_log_handler = TimedRotatingFileHandler(app.config.get('CRON_LOG_FILE'), interval=1, when='d', backupCount=3)
|
||||
@@ -40,18 +40,18 @@ def add_default_jobs(sched=None, testing=False):
|
||||
sched = scheduler
|
||||
|
||||
if testing:
|
||||
check_recorder_state_job = sched.add_job(recorder_checker.check_object_state, 'interval', seconds=40,
|
||||
check_recorder_state_job = sched.add_job(async_cron_recorder_checker.check_object_state, 'interval', seconds=40,
|
||||
id="check_recorder_state_job")
|
||||
|
||||
else:
|
||||
check_recorder_state_job = sched.add_job(recorder_checker.check_object_state, 'interval', minutes=2,
|
||||
check_recorder_state_job = sched.add_job(async_cron_recorder_checker.check_object_state, 'interval', minutes=2,
|
||||
id="check_recorder_state_job")
|
||||
|
||||
"""
|
||||
Job regularly sending the state to "frontend recorders" through websocket
|
||||
"""
|
||||
send_update_state_to_recorder_job = sched.add_job(
|
||||
lambda: send_state_update_to_recorders(recorder_checker.get_current_state()), 'interval', minutes=1,
|
||||
lambda: send_state_update_to_recorders(async_cron_recorder_checker.get_current_state()), 'interval', minutes=1,
|
||||
id="send_update_state_to_recorder_job")
|
||||
|
||||
return [check_recorder_state_job, send_update_state_to_recorder_job]
|
||||
@@ -86,9 +86,9 @@ if __name__ == '__main__':
|
||||
time.sleep(sleep_time)
|
||||
recorder_id = random.randint(0, 15)
|
||||
cron_logger.info("Using recorder id {}".format(recorder_id))
|
||||
recorder_checker.add_object_to_state_check(recorder_id)
|
||||
recorder_checker.add_object_to_state_check(recorder_id + 1)
|
||||
pprint(recorder_checker.get_current_state())
|
||||
async_cron_recorder_checker.add_object_to_state_check(recorder_id)
|
||||
async_cron_recorder_checker.add_object_to_state_check(recorder_id + 1)
|
||||
pprint(async_cron_recorder_checker.get_current_state())
|
||||
|
||||
while True:
|
||||
user_in = input("Type >exit< to quit.")
|
||||
|
||||
@@ -27,6 +27,7 @@ class StateChecker(Generic[T]):
|
||||
The determined state is stored "locally" in the state checker object and NOT reflected back to the checked objects!
|
||||
It can be retrieved by calling get_current_state.
|
||||
"""
|
||||
|
||||
def __init__(self, state_checker_func: Union[Callable, List[Callable]], type_to_check: T, type_name=None,
|
||||
threads=NUM_THREADS):
|
||||
self.num_threads = threads
|
||||
@@ -149,5 +150,16 @@ class StateChecker(Generic[T]):
|
||||
with self.update_state_lock:
|
||||
return copy.deepcopy(self.state_results)
|
||||
|
||||
def get_current_state_for_recorder_name(self, recorder_name: str):
|
||||
return self.get_current_state().get(recorder_name, None)
|
||||
|
||||
recorder_checker = StateChecker([check_capture_agent_state, ping_capture_agent], Recorder)
|
||||
def get_current_state_for_recorder_id(self, recorder_id: int):
|
||||
states = self.get_current_state()
|
||||
for key in states:
|
||||
state = states[key]
|
||||
if state.get('id', None) == recorder_id: # found!
|
||||
return state
|
||||
return None
|
||||
|
||||
|
||||
async_cron_recorder_checker = StateChecker([check_capture_agent_state, ping_capture_agent], Recorder)
|
||||
|
||||
Reference in New Issue
Block a user