!7 sS url = "https://localhost/1010504/raw/number-of-threads"; static double timeout = 60.0, delay = 30.0; static int consecutiveFailsThreshold = /*2*/ 6; // times delay static int consecutiveFailsThresholdWhenLoading = 20; // not used currently sbool loading; static int consecutiveFails; static volatile S status; p { disableCertificateValidation(); bot("Eleu Watch Dog."); printWithDateAndTimeInThisThread(); repeat with sleep delay { bool ok = false; loading = false; pcall { long time = sysNow(); S s = loadPageWithTimeout(url, timeout); if (startsWith(s, "LOADING")) loading = true; // TODO: loading is now code 500 if (isInteger(s)) { ok = true; consecutiveFails = 0; print(status = "Server OK - " + n2(parseLong(s), "thread", "threads") + ", " + (sysNow()-time) + " ms"); } } if (!ok) { ++consecutiveFails; print(status = "Server fail #" + consecutiveFails + " of " + actualThreshold() + (loading ? " (loading)" : "")); pcall { serverFailActivity(); } } } } static int actualThreshold() { ret loading ? consecutiveFailsThresholdWhenLoading : consecutiveFailsThreshold; } svoid serverFailActivity { if (consecutiveFails >= actualThreshold()) { print("RESTARTING ELEU."); consecutiveFails = 0; hardKillProgram(#1002017); run(#1002710); } } answer { if "status" ret status; }