Exemple #1
0
 public PiSystemHub(IMetricStream metricStream)
 {
     this.metricStream = metricStream;
     this.container    = new HashSet <string>();
 }
Exemple #2
0
        public void CaptureMetrics(IMetricStream stream)
        {
            var retVal = new List <MetricBase>();

            _processedPids.Clear();

            var processes = Process.GetProcesses();

            foreach (var proc in processes)
            {
                _processinfo pinfo;
                if (!_counters.TryGetValue(proc.Id, out pinfo))
                {
                    pinfo             = new _processinfo();
                    pinfo.CpuPerc     = new PerformanceCounter("Process", "% Processor Time", proc.ProcessName);
                    pinfo.MemoryUsage = new PerformanceCounter("Process", "Working Set - Private", proc.ProcessName);
                    //pinfo.DiscUsage = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
                    //pinfo.NetworkUsage = new PerformanceCounter("Network Interface", "% Processor Time", proc.ProcessName);
                }

                var metric = new ProcessDescriptorMetric();
                try
                {
                    metric.TimeStamp   = DateTime.UtcNow;
                    metric.Name        = proc.ProcessName;
                    metric.Pid         = proc.Id;
                    metric.SessionId   = proc.SessionId;
                    metric.CpuPerc     = pinfo.CpuPerc.NextValue();
                    metric.MemoryUsage = pinfo.MemoryUsage.NextValue() / 1024 / 1024;
                    //metric.DiscUsage = pinfo.DiscUsage.NextValue();
                }
                catch
                {
                    //todo: ???
                    metric = null;
                }
                if (metric != null)
                {
                    stream.Append(metric);
                }

                _processedPids.Add(proc.Id);
            }

            foreach (var counters in _counters)
            {
                if (!_processedPids.Contains(counters.Key))
                {
                    var info = counters.Value;
                    info.CpuPerc.Dispose();
                    info.MemoryUsage.Dispose();
                    info.DiscUsage.Dispose();
                    _counters.Remove(counters.Key);

                    stream.Append(new ProcessDescriptorMetric {
                        TimeStamp = DateTime.UtcNow,
                        Pid       = counters.Key
                    });
                }
            }
        }