Exemplo n.º 1
0
 public void Print(MetricsCollection metricsCollection, SortKind sortKind, int top)
 {
     lock (sync)
     {
         PrintInternal(metricsCollection, sortKind, top);
     }
 }
Exemplo n.º 2
0
        private unsafe void Collect(TimeSpan period)
        {
            var processes = new List <ProcessMetrics>();
            var newTimes  = new Dictionary <int, long>();


            NtUtility.VisitProcesses(info => Visit(info, newTimes, processes, period));

            times = newTimes;

            var metricsCollection = new MetricsCollection
            {
                ProcessMetricsCollection = processes.ToArray(),
                Timestamp   = DateTime.UtcNow,
                MachineName = Environment.MachineName
            };

            Task.Run(() => MetricsAvailable(this, metricsCollection));
        }
        private unsafe void Collect(TimeSpan period)
        {
            var processes = new List <ProcessMetrics>();
            var newTimes  = new Dictionary <int, long>();

            NtUtility.VisitProcesses(info =>
            {
                var pid          = (int)info->UniqueProcessId;
                var currentTimes = info->KernelTime + info->UserTime;
                var prevTimes    = times.TryGetValue(pid, out var t) ? t : currentTimes;
                newTimes[pid]    = currentTimes;

                processes.Add(new ProcessMetrics
                {
                    BasePriority     = info->BasePriority,
                    HandlesCount     = (int)info->HandleCount,
                    Name             = GetProcessName(info->NamePtr),
                    PeakPrivateBytes = (long)info->PeakPagefileUsage,
                    WorkingSet       = (long)info->WorkingSetSize,
                    PrivateBytes     = (long)info->PrivatePageCount,
                    ProcessId        = (int)info->UniqueProcessId,
                    SessionId        = (int)info->SessionId,
                    PeakWorkingSet   = (long)info->PeakWorkingSetSize,
                    ThreadsCount     = (int)info->NumberOfThreads,
                    Cpu = (currentTimes - prevTimes) / (double)period.Ticks / Environment.ProcessorCount
                });
            });

            times = newTimes;

            var metricsCollection = new MetricsCollection
            {
                ProcessMetricsCollection = processes.ToArray(),
                Timestamp   = DateTime.UtcNow,
                MachineName = Environment.MachineName
            };

            Task.Run(() => MetricsAvailable(this, metricsCollection));
        }
Exemplo n.º 4
0
        private void PrintInternal(MetricsCollection collection, SortKind sortKind, int top)
        {
            stringBuilder.Clear();
            stringBuilder.AppendLine($"Machine: {collection.MachineName}, Timestamp: {collection.Timestamp}");

            var table = ConsoleTable.From(
                Sort(collection
                     .ProcessMetricsCollection, sortKind)
                .Take(top)
                .Select(x => new ProcessMetricsModel(x)))
                        .ToMarkDownString();

            var lines = stringBuilder.Append(table).ToString().Split(NewLine, StringSplitOptions.RemoveEmptyEntries);

            stringBuilder.Clear();

            var width = GetConsoleWidth();

            if (consoleWidth != width)
            {
                Console.Clear();
                consoleWidth = width;
            }

            foreach (var line in lines)
            {
                stringBuilder.Append(line, 0, Math.Min(width, line.Length));
                if (line.Length < width)
                {
                    stringBuilder.Append(' ', width - line.Length);
                }
                stringBuilder.AppendLine();
            }

            Console.SetCursorPosition(0, 0);
            Console.WriteLine(stringBuilder.ToString());
        }