diff --git a/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs b/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs
index 65482023b..dca403a13 100644
--- a/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs
+++ b/src/Artemis.Core/Services/ProcessMonitor/Events/ProcessEventArgs.cs
@@ -3,11 +3,17 @@ using System.Diagnostics;
namespace Artemis.Core.Services
{
+ ///
+ /// Contains data for the ProcessMonitor process events
+ ///
public class ProcessEventArgs : EventArgs
{
+ ///
+ /// Gets the process related to the event
+ ///
public Process Process { get; }
- public ProcessEventArgs(Process process)
+ internal ProcessEventArgs(Process process)
{
Process = process;
}
diff --git a/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs b/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs
index 37ae223ae..b26376b37 100644
--- a/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs
+++ b/src/Artemis.Core/Services/ProcessMonitor/Interfaces/IProcessMonitorService.cs
@@ -7,12 +7,24 @@ using System.Threading.Tasks;
namespace Artemis.Core.Services
{
+ ///
+ /// A service that provides events for started and stopped processes and a list of all running processes.
+ ///
public interface IProcessMonitorService : IArtemisService
{
+ ///
+ /// Occurs when a process starts.
+ ///
event EventHandler ProcessStarted;
+ ///
+ /// Occurs when a process stops.
+ ///
event EventHandler ProcessStopped;
+ ///
+ /// Returns an enumerable with the processes running on the system.
+ ///
IEnumerable GetRunningProcesses();
}
}
diff --git a/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs b/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs
index a487fc626..86f38e0a1 100644
--- a/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs
+++ b/src/Artemis.Core/Services/ProcessMonitor/ProcessMonitorService.cs
@@ -7,24 +7,26 @@ using System.Timers;
namespace Artemis.Core.Services
{
- public class ProcessMonitorService : IProcessMonitorService
+ internal class ProcessMonitorService : IProcessMonitorService
{
private readonly ILogger _logger;
private readonly Timer _processScanTimer;
+ private readonly ProcessComparer _comparer;
private Process[] _lastScannedProcesses;
public ProcessMonitorService(ILogger logger)
{
_logger = logger;
- _lastScannedProcesses = Process.GetProcesses().DistinctBy(p => p.ProcessName).ToArray();
+ _lastScannedProcesses = Process.GetProcesses();
_processScanTimer = new Timer(1000);
_processScanTimer.Elapsed += OnTimerElapsed;
_processScanTimer.Start();
+ _comparer = new ProcessComparer();
}
- public event EventHandler ProcessStarted;
+ public event EventHandler? ProcessStarted;
- public event EventHandler ProcessStopped;
+ public event EventHandler? ProcessStopped;
public IEnumerable GetRunningProcesses()
{
@@ -33,14 +35,14 @@ namespace Artemis.Core.Services
private void OnTimerElapsed(object sender, ElapsedEventArgs e)
{
- var newProcesses = Process.GetProcesses().DistinctBy(p => p.ProcessName).ToArray();
- foreach (var startedProcess in newProcesses.Except(_lastScannedProcesses, new ProcessComparer()))
+ Process[] newProcesses = Process.GetProcesses();
+ foreach (Process startedProcess in newProcesses.Except(_lastScannedProcesses, _comparer))
{
ProcessStarted?.Invoke(this, new ProcessEventArgs(startedProcess));
_logger.Debug("Started Process: {startedProcess}", startedProcess.ProcessName);
}
- foreach (var stoppedProcess in _lastScannedProcesses.Except(newProcesses, new ProcessComparer()))
+ foreach (Process stoppedProcess in _lastScannedProcesses.Except(newProcesses, _comparer))
{
ProcessStopped?.Invoke(this, new ProcessEventArgs(stoppedProcess));
_logger.Debug("Stopped Process: {stoppedProcess}", stoppedProcess.ProcessName);