internal async Task RunMonitoringAsync()

in src/PatchOrchestrationApplication/NodeAgentService/src/MonitorWindowsService.cs [58:119]


        internal async Task RunMonitoringAsync(CancellationToken cancellationToken)
        {
            Stopwatch serviceStopwatch = new Stopwatch();
            serviceStopwatch.Start();
            this.serviceController = new ServiceController(ServiceName);
            DateTime? lastSuccessfullRunningDataDateTime = null;

            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();
                this.serviceController.Refresh();
                ServiceControllerStatus status;

                try
                {
                    status = this.serviceController.Status;
                }
                catch (Exception ex)
                {
                    string alertMessage = string.Format("Couldn't get the status of service, Exception = {0}", ex);
                    ServiceEventSource.Current.InfoMessage(alertMessage);
                    this.SetHealthAlert(alertMessage);
                    await Task.Delay(TimeSpan.FromSeconds(PollingFrequencyInSeconds), cancellationToken);
                    continue;
                }

                switch (status)
                {
                    case ServiceControllerStatus.Running:
                    {
                        lastSuccessfullRunningDataDateTime = DateTime.UtcNow;
                        serviceStopwatch.Restart();
                        this.ResetHealthAlert(String.Format("Service : {0} is running successfully", ServiceName));
                        break;
                    }
                    default:
                    {
                        long elapsedTime = serviceStopwatch.ElapsedMilliseconds;
                        if (elapsedTime > NtServiceWatchdogInMilliseconds)
                        {
                            string alertMessage =
                                String.Format(
                                    "Service {0} is not running since {1} milliseconds. Last successfull running time : {2}",
                                    ServiceName, elapsedTime,
                                    null == lastSuccessfullRunningDataDateTime
                                        ? "unknown"
                                        : lastSuccessfullRunningDataDateTime.ToString());
                            this.SetHealthAlert(alertMessage);
                        }

                        Console.WriteLine(
                            "Service {0} not running. Found in {1} state. Time elapsed since last running = {2}",
                            ServiceName, status, elapsedTime);
                        break;
                    }
                }

                DirectoryUtility.TrimDirectory(logsFolder, LogsDiskQuotaInBytes);

                await Task.Delay(TimeSpan.FromSeconds(PollingFrequencyInSeconds), cancellationToken);
            }
        }