Example #1
0
        private ProcessStats GetProcessStats(Process p)
        {
            ProcessStats stats = new ProcessStats()
            {
                ExecutionTimeMs = p.ProcessWallTimeMs,
            };

            foreach (int file in p.Consumes)
            {
                File f;
                if (m_buildGraph.Files.TryGetValue(file, out f))
                {
                    if (f.Location.EndsWith(".cs", StringComparison.OrdinalIgnoreCase))
                    {
                        stats.CsFiles++;
                    }
                    else if (f.Location.EndsWith(".cpp", StringComparison.OrdinalIgnoreCase))
                    {
                        stats.CppFiles++;
                    }
                }
            }

            return(stats);
        }
Example #2
0
    private void ProcMonitor(object myProc)
    {
        Process      Proc         = (Process)myProc;
        ProcessStats procStats    = new ProcessStats(Proc);
        string       HashProcName = Proc.ProcessName + "(" + Proc.Id + ")";

        Console.WriteLine("\tMonitoring...");
        while (!Proc.HasExited)
        {
            lock (this)
            {
                if (!this.Monitoring)
                {
                    Proc = null;
                    return;
                }
            }
            procStats.UpdateStats(Proc);
            Thread.Sleep(500);
        }

        lock (this)
        {
            Debug.WriteLine("Closing Thread");
            this.RemoveWatched(HashProcName);
            this.ProcInfo.Add(procStats);
            this.FlushMonitorStream();
            Proc.Close();
            Proc.Dispose();
        }
    }
        public async Task ProcessThresholdsExceeded_OutOfProc_ReturnsExpectedResult(ProcessStats hostProcessStats, List <ProcessStats> allWorkerProcessStats, bool expected)
        {
            var workerStatuses = new Dictionary <string, WorkerStatus>();

            foreach (var workerProcessStats in allWorkerProcessStats)
            {
                var workerStatus = new WorkerStatus
                {
                    ProcessStats = workerProcessStats
                };
                workerStatuses.Add(Guid.NewGuid().ToString(), workerStatus);
            }

            var mockDispatcher = new Mock <IFunctionInvocationDispatcher>(MockBehavior.Strict);

            mockDispatcher.SetupGet(p => p.State).Returns(FunctionInvocationDispatcherState.Initialized);
            mockDispatcher.Setup(p => p.GetWorkerStatusesAsync()).ReturnsAsync(workerStatuses);
            var mockDispatcherFactory = new Mock <IFunctionInvocationDispatcherFactory>(MockBehavior.Strict);

            mockDispatcherFactory.Setup(p => p.GetFunctionDispatcher()).Returns(mockDispatcher.Object);
            var mockScriptHostManager = new Mock <IScriptHostManager>(MockBehavior.Strict);
            var scriptHostManagerServiceProviderMock = mockScriptHostManager.As <IServiceProvider>();

            scriptHostManagerServiceProviderMock.Setup(p => p.GetService(typeof(IFunctionInvocationDispatcherFactory))).Returns(mockDispatcherFactory.Object);
            _serviceProviderMock.Setup(p => p.GetService(typeof(IScriptHostManager))).Returns(mockScriptHostManager.Object);

            _mockProcessMonitor.Setup(p => p.GetStats()).Returns(hostProcessStats);

            Collection <string> exceededCounters = new Collection <string>();
            bool result = await _performanceManager.ProcessThresholdsExceeded(exceededCounters, _logger);

            Assert.Equal(expected, result);
        }
Example #4
0
        private static bool ClearTrackTopicQueue(TopicViewCollection <TopicView> tvc)
#endif
        {
            ProcessStats ps = new ProcessStats(tvc);

            ps.Enqueue();

            return(true);
        }
Example #5
0
        static async Task <ProcessStats> RunOneProcess(string commandline, string prefix, TextWriter outWriter, TextWriter errWriter, CancellationToken cancel, bool skipEmptyLines, bool writeStderr, ICollection <uint> procIDs)
        {
            log.dbg("starting: [{0}]", commandline);

            uint?currProcID = null;

            ProcessStats procStats = await ProcessRedirectAsync.Run(
                commandline,
                onProcessCreated : (uint procId) =>
            {
                currProcID = procId;
                lock (procIDs)
                {
                    procIDs.Add(procId);
                }
            },
                onProcessOutput : (kind, line) =>
            {
                if (kind == KINDOFOUTPUT.STDERR && !writeStderr)
                {
                    return;
                }

                if (skipEmptyLines && String.IsNullOrWhiteSpace(line))
                {
                    return;
                }

                TextWriter writer = kind == KINDOFOUTPUT.STDOUT ? outWriter : errWriter;

                if (String.IsNullOrEmpty(prefix))
                {
                    writer.WriteLine(line);
                }
                else
                {
                    writer.WriteLine(prefix + "\t" + line);
                }
            });

            if (currProcID.HasValue)
            {
                lock (procIDs)
                {
                    procIDs.Remove(currProcID.Value);
                }
                log.dbg("process ended: ID: {0}, ExitCode: {1}", currProcID.Value, procStats.ExitCode);
            }
            else
            {
                log.err("proc has no ID set. komisch...?");
            }

            return(procStats);
        }
        public async Task ProcessThresholdsExceeded_InProc_ReturnsExpectedResult(ProcessStats hostProcessStats, bool expected)
        {
            _serviceProviderMock.Setup(p => p.GetService(typeof(IScriptHostManager))).Returns(null);

            _mockProcessMonitor.Setup(p => p.GetStats()).Returns(hostProcessStats);

            Collection <string> exceededCounters = new Collection <string>();
            bool result = await _performanceManager.ProcessThresholdsExceeded(exceededCounters, _logger);

            Assert.Equal(expected, result);
        }
Example #7
0
        protected void Assert(ProcessStats process)
        {
            process.Should().NotBeNull();

            process.Timestamp.Should().BeGreaterThan(0);
            process.OpenFileDescriptors.Should().NotBe(0);

            process.CPU.Should().NotBeNull();
            process.CPU.TotalInMilliseconds.Should().BeGreaterThan(0);
            process.Memory.Should().NotBeNull();
            process.Memory.TotalVirtualInBytes.Should().BeGreaterThan(0);
        }
Example #8
0
 /// <summary>
 /// 线程更新统计信息
 /// </summary>
 /// <param name="isguest">是否游客</param>
 public static void UpdateStatCount(bool isguest, bool sessionexists)
 {
     string browser = Utils.GetClientBrower();
     string os = Utils.GetClientOS();
     string visitorsadd = string.Empty;
     if (!sessionexists)
     {
         visitorsadd = "OR ([type]='browser' AND [variable]='" + browser + "') OR ([type]='os' AND [variable]='" + os + "')"
         + (isguest ? " OR ([type]='total' AND [variable]='guests')" : " OR ([type]='total' AND [variable]='members')");
     }
     ProcessStats ps = new ProcessStats(browser, os, visitorsadd);
     ps.Enqueue();
 }
Example #9
0
        public static Stats Run(IEnumerable <ProcCtx> ProcessesToStart, TextWriter outStream, TextWriter errStream, int maxParallel, bool skipEmptyLines, bool quiet, bool writeStderr, Func <long> numberJobs)
        {
            ProcessRedirectAsync.Init();
            Stats stats = new Stats();

            if (numberJobs != null)
            {
                Task.Run(() => stats.AllItems = numberJobs());
            }
            ICollection <uint> runningProcIDs = new HashSet <uint>();

            using (CancellationTokenSource cts = new CancellationTokenSource())
                using (TextWriter exitcodeWriter = TextWriter.Synchronized(new StreamWriter(@".\forp.ExitCode.txt", append: false, encoding: Encoding.UTF8)))
                {
                    log.dbg($"starting with maxParallel: {maxParallel}");
                    var cancel = cts.Token;
                    if (!quiet)
                    {
                        Console.Error.WriteLine("press 'q' to quit. 'h' for more keys.");
                    }
                    Task.Run(() => HandleKeys(cts, outStream, errStream, runningProcIDs));

                    var procs     = new MaxTasks();
                    var procsTask = procs.Start(
                        tasks: ProcessesToStart.Select(
                            async(procToRun) =>
                    {
                        ProcessStats procStats = await RunOneProcess(procToRun.commandline, procToRun.prefix, outStream, errStream, cancel, skipEmptyLines, writeStderr, runningProcIDs).ConfigureAwait(false);
                        exitcodeWriter.WriteLine($"{procStats.ExitCode}\t{procToRun.commandline}");
                        Interlocked.Add(ref stats.procTotalTime, procStats.TotalTime.Ticks);
                        Interlocked.Add(ref stats.procKernelTime, procStats.KernelTime.Ticks);
                        Interlocked.Add(ref stats.procUserTime, procStats.UserTime.Ticks);
                    }),
                        MaxParallel: maxParallel,
                        cancel: cts.Token);

                    if (!quiet)
                    {
                        var status      = new StatusLineWriter();
                        var currProcess = Process.GetCurrentProcess();
                        Misc.DoUntilTaskFinished(procsTask, TimeSpan.FromSeconds(2), () => WriteStatusLine(status, procs, currProcess, stats));
                        Console.Error.WriteLine();
                    }
                    else
                    {
                        procsTask.Wait();
                    }
                }
            return(stats);
        }
Example #10
0
        /// <summary>
        /// 线程更新统计信息
        /// </summary>
        /// <param name="isguest">是否游客</param>
        public static void UpdateStatCount(bool isguest, bool sessionexists)
        {
            string browser     = Utils.GetClientBrower();
            string os          = Utils.GetClientOS();
            string visitorsadd = string.Empty;

            if (!sessionexists)
            {
                visitorsadd = "OR ([type]='browser' AND [variable]='" + browser + "') OR ([type]='os' AND [variable]='" + os + "')"
                              + (isguest ? " OR ([type]='total' AND [variable]='guests')" : " OR ([type]='total' AND [variable]='members')");
            }
            ProcessStats ps = new ProcessStats(browser, os, visitorsadd);

            ps.Enqueue();
        }
Example #11
0
        public async Task DisplayProcessResutls()
        {
            pnlProcesses.Controls.Clear();
            if (ProcessStats.Any())
            {
                foreach (var item in ProcessStats)
                {
                    if (item.ShowOnDashboard == true)
                    {
                        IconChar icon     = IconChar.None;
                        string   n        = item.Name;
                        bool     existent = RuntimeSettings.ProcessIcons.TryGetValue(n, out icon);

                        Color BarColor = Color.Transparent;
                        if (!string.IsNullOrEmpty(n))
                        {
                            existent = RuntimeSettings.ProcessColors.TryGetValue(n, out BarColor);
                        }


                        ThreeRowsColumn card = new ThreeRowsColumn(barColor: BarColor);
                        card.Name         = item.Name;
                        card.Icon         = icon;
                        card.L1Text       = item.Count.ToString();
                        card.L2Text       = item.Result.ToString();
                        card.L3Text       = item.PercentOfAll.ToString("0.00");
                        card.Action       = new Action <int?, string>(OpenProcesses);
                        card.ActionTypeId = item.ActionTypeId;
                        card.DateFrom     = DateFrom;
                        card.DateTo       = DateTo;
                        card.Dock         = DockStyle.Left;
                        pnlProcesses.Controls.Add(card);
                    }
                }
            }

            ThreeRowsColumn Headlines = new ThreeRowsColumn();

            Headlines.Dock = DockStyle.Left;
            pnlProcesses.Controls.Add(Headlines);
        }
Example #12
0
        public ActionResult <ProcessStats> GetProcessStats()
        {
            try
            {
                ProcessStatsResourcer resourcer    = new ProcessStatsResourcer();
                ProcessStats          processStats = resourcer.Retrieve(Logger);

                return(Ok(processStats));
            }
            catch (ResourceFindException exception)
            {
                Logger.LogError($"App Level Exception: {exception.Message}", exception);

                return(StatusCode(ApiServiceFailure.ServiceFailure, exception.Message));
            }
            catch (Exception exception)
            {
                Logger.LogError($"Endpoint Exception: {exception.Message}", exception);

                return(StatusCode(ApiServiceFailure.ServiceFailure));
            }
        }
Example #13
0
 private static void ClearTrackEntryQueue(IEnumerable<EntryView> evc)
 {
     ProcessStats ps = new ProcessStats(evc);
     ps.Enqueue();
 }