private bool WriteProgress(RestartCoreStage coreStage, string currentOperation = null) { currentOperation = currentOperation ?? ProgressManager.CurrentRecord.CurrentOperation; var completedPercent = (int)((double)coreStage / 3 * 100); var completed = coreStage == RestartCoreStage.Completed; if (completed) { if (ProgressManager.ProgressWritten) { CompletePostProcessProgress(); } return(false); } DisplayPostProcessProgress(ProgressActivity, statusDescription, completedPercent, secondsRemaining, currentOperation); for (int i = 0; i < 5; i++) { secondsRemaining--; secondsElapsed++; if (secondsRemaining < 0) { secondsRemaining = 30; } ProgressManager.CurrentRecord.SecondsRemaining = secondsRemaining; if (secondsElapsed > Timeout) { throw new TimeoutException($"Timed out waiting for PRTG Core Service to restart"); } if (Stopping) { return(false); } #if DEBUG if (!client.UnitTest()) { Thread.Sleep(1000); } #endif ProgressManager.WriteProgress(true); } if (Stopping) { return(false); } return(true); }
public void AdminTool_RestartCore_CanWait() { var standardClient = Initialize_Client(new BasicResponse(string.Empty)); RestartCoreStage lastCoreStage = RestartCoreStage.Shutdown; var webClient = new MockWebClient(new RestartPrtgCoreResponse()); var customClient = new PrtgClient(standardClient.Server, standardClient.UserName, standardClient.PassHash, AuthMode.PassHash, webClient); customClient.RestartCore(true, stage => { lastCoreStage = stage; if (stage == RestartCoreStage.Restart) return false; return true; }); Assert.AreEqual(RestartCoreStage.Restart, lastCoreStage, "Waiting did not stop after returning false"); }
private bool WriteCoreProgress(RestartCoreStage stage) { string operation = null; switch (stage) { case RestartCoreStage.Shutdown: operation = "Waiting for PRTG Core Service to shutdown"; break; case RestartCoreStage.Restart: operation = "Waiting for PRTG Core Service to restart"; break; case RestartCoreStage.Startup: operation = "Waiting for PRTG Core Server to initialize"; break; } return(WriteProgress(stage, operation)); }
private IWebResponse GetRestartServerProgressResponse() { switch (restartCoreStage) { case RestartCoreStage.Shutdown: if (shutdownRequestCount == 0) { shutdownRequestCount++; return(new MessageResponse()); } restartCoreStage = RestartCoreStage.Restart; throw new WebException(); case RestartCoreStage.Restart: restartCoreStage = RestartCoreStage.Startup; throw new HttpRequestException(); case RestartCoreStage.Startup: return(new MessageResponse(new TestItems.MessageItem(statusRaw: "1"))); default: throw new NotImplementedException($"Unknown stage '{restartCoreStage}'"); } }
internal async Task WaitForCoreRestartAsync(DateTime restartTime, Func <RestartCoreStage, bool> callback) { RestartCoreStage coreStage = RestartCoreStage.Shutdown; var originalRetries = RetryCount; try { RetryCount = 0; while (coreStage != RestartCoreStage.Completed) { coreStage = await ProbeServerAsync(restartTime).ConfigureAwait(false); if (callback != null && !callback(coreStage)) { break; } if (coreStage == RestartCoreStage.Completed) { break; } #if !DEBUG if (callback == null) { await Task.Delay(5000).ConfigureAwait(false); } #endif } } finally { RetryCount = originalRetries; } }
//###################################### // WaitForCoreRestart //###################################### internal void WaitForCoreRestart(DateTime restartTime, Func <RestartCoreStage, bool> callback) { RestartCoreStage coreStage = RestartCoreStage.Shutdown; var originalRetries = RetryCount; try { RetryCount = 0; while (coreStage != RestartCoreStage.Completed) { coreStage = ProbeServer(restartTime); if (callback != null && !callback(coreStage)) { break; } if (coreStage == RestartCoreStage.Completed) { break; } #if !DEBUG if (callback == null) { Thread.Sleep(5000); } #endif } } finally { RetryCount = originalRetries; } }