!7 static double timeout = 60.0, delay = 30.0; static int consecutiveFailsThreshold = 2; static int consecutiveFails; static volatile S status; p { bot("Stefan's OS Watch Dog."); printWithDateAndTimeInThisThread(); repeat with sleep delay { bool ok = false; loading = false; pcall { long time = sysNow(); S s = sendOpt("Stefan's OS.", "swing latency"); if (isInteger(s)) { ok = true; consecutiveFails = 0; print(status = "Stefan's OS OK - swing latency " + s + " ms, " + (sysNow()-time) + " ms"); } } if (!ok) { ++consecutiveFails; print(status = "Stefan's OS fail #" + consecutiveFails + " of " + consecutiveFailsThreshold); pcall { osFailActivity(); } } } } svoid osFailActivity { if (consecutiveFails >= actualThreshold()) { print("RESTARTING STEFAN'S OS."); consecutiveFails = 0; hardKillProgram(#1016005); hardKillProgram(#1016478); run(#1016478); // TODO } } answer { if "status" ret status; }