protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                Console.WriteLine("EXECUTING...");
                var runningProcesses = Process.GetProcesses();
                await Task.Run(() =>
                {
                    foreach (var p in runningProcesses)
                    {
                        try
                        {
                            var monitoredProcess = new MonitoredProcess()
                            {
                                ProcessId    = p.Id,
                                ProcessName  = p.ProcessName,
                                DateTime     = DateTime.Now,
                                ProcessOwner = GetProcessOwner(p.ProcessName),
                                CpuLoad      = Utils.Process.ProcessCpuCounter.GetPerfCounterForProcessId(p.Id)?.NextValue()
                            };

                            _addStatisticsGrainPool.Put(monitoredProcess);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Exception: {ex.Message}");
                        }
                    }
                });

                Thread.Sleep(5000);
            }
        }
        public void Update()
        {
            //handle any incoming commands...
            lock (s_lockObject)
            {
                foreach (int pid in m_pidsToValidate)
                {
                    //
                    if (m_processManager.FindProcessById(pid))
                    {
                        MonitoredProcess proc;
                        if (m_processes.TryGetValue(pid, out proc))
                        {
                            m_processes[pid] = new MonitoredProcess(pid);
                        }
                        else
                        {
                            m_processes.Add(pid, new MonitoredProcess(pid));
                        }
                    }
                }
                m_pidsToValidate.Clear();

                //check for missing pids

                foreach (var pair in m_processes)
                {
                    if (!m_processManager.FindProcessById(pair.Key))
                    {
                        m_pidsToValidate.Add(pair.Key);
                    }
                }

                foreach (int pid in m_pidsToValidate)
                {
                    m_processes.Remove(pid);
                }
                m_pidsToValidate.Clear();

                //check for pid timeouts
                foreach (var pair in m_processes)
                {
                    int secondsSinceLastHeartbeat = (DateTime.Now - pair.Value.m_startTime).Seconds;
                    if (secondsSinceLastHeartbeat >= 30)
                    {
                        Console.WriteLine("Restart " + pair.Key);
                        m_processManager.RestartProcessById(pair.Key);
                    }
                }
            }
        }
Beispiel #3
0
 protected void TryRun(MonitoredProcess process)
 {
     try
     {
         if (!process.IsRunning())
         {
             process.Start();
         }
     }
     catch (Exception ex)
     {
         this.Logger.Log(Level.Error, "Error attempting to start a MonitoredProcess.", ex);
     }
 }
Beispiel #4
0
 private protected void Initialise(IVideoViewModel videoViewModel, MonitoredProcess process)
 {
     Initialise(videoViewModel);
     Process = process;
 }
Beispiel #5
0
 public void Add(MonitoredProcess sender)
 {
     monitoredProcesses.Add(sender);
 }