feat: periodically checkpoint server/sud logs to disk
Both loggers previously only wrote their JSON log on their end trigger (shutdown / Stop-or-DONE), losing the whole session/run's data on a hard crash or power loss. Add a log_interval (config.json, default 300s) that rewrites the same file whole every N seconds in between. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvgC7oy9MxaA4ZQxXqkNdS
This commit is contained in:
+13
-4
@@ -131,16 +131,25 @@ if __name__ == '__main__':
|
||||
sud_task = SudTask(sud, tc, stirrer, pot, DT, DT_TASK, dispatcher.msgio_get("Sud"), forecast_estimator)
|
||||
taskmgr.add(sud_task)
|
||||
|
||||
# How often the server/sud logs checkpoint themselves to disk (in
|
||||
# addition to always writing on their own end trigger) - so a hard
|
||||
# crash/power loss only loses up to this much data. Config-only (no CLI
|
||||
# flag): it's a plant/deployment concern like the rest of config.json,
|
||||
# not a per-invocation run-mode knob.
|
||||
log_interval = config.get('log_interval', 300)
|
||||
|
||||
# Continuous server-session log - records from startup to shutdown
|
||||
# regardless of Sud state; written to logs/log_{date_time}.json on exit.
|
||||
server_log_task = ServerLogTask(tc, heater, heater_task, DT_TASK, args.logdir, config=config, dt=DT)
|
||||
# regardless of Sud state; written to logs/log_{date_time}.json on exit
|
||||
# and every log_interval seconds in between.
|
||||
server_log_task = ServerLogTask(tc, heater, heater_task, DT_TASK, args.logdir, config=config, dt=DT, log_interval=log_interval)
|
||||
if startup_params is not None:
|
||||
server_log_task.log_plant_params(0, startup_params)
|
||||
taskmgr.add(server_log_task)
|
||||
|
||||
# Per-run log - only records while a Sud is actually playing; written to
|
||||
# logs/log_{date_time}_{sud_name}.log on Stop (or natural completion).
|
||||
sud_log_task = SudLogTask(tc, heater, heater_task, sud, DT_TASK, args.logdir, config=config, dt=DT)
|
||||
# logs/log_{date_time}_{sud_name}.log on Stop (or natural completion) and
|
||||
# every log_interval seconds in between.
|
||||
sud_log_task = SudLogTask(tc, heater, heater_task, sud, DT_TASK, args.logdir, config=config, dt=DT, log_interval=log_interval)
|
||||
taskmgr.add(sud_log_task)
|
||||
|
||||
sud_task.set_on_plant_params(lambda elapsed, params: (
|
||||
|
||||
Reference in New Issue
Block a user