示例#1
0
        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);
        }
示例#2
0
        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");
        }
示例#3
0
        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}'");
            }
        }
示例#5
0
        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;
            }
        }
示例#6
0
        //######################################
        // 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;
            }
        }