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);
}
}