private static void OnTimer(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (!monitor.started)
            {
                monitor.Run();
            }

            var metricTask = Task.Run(() =>
            {
                List <string> monitoredApps = ConfigTools.GetConfiguredApps();
                foreach (string app in monitoredApps)
                {
                    Process[] processList = Process.GetProcessesByName(app);
                    if (!processList.IsNullOrEmpty())
                    {
                        foreach (Process processItem in processList)
                        {
                            Console.WriteLine($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Memory|{processItem.ProcessName}|Current Usage,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.WorkingSet64 / 1000}");
                            Console.WriteLine($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Memory|{processItem.ProcessName}|Current Committed,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.PeakWorkingSet64 / 1000}");
                            Console.WriteLine($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Process|{processItem.ProcessName}|Thread Count,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.Threads.Count}");
                            Console.WriteLine($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Process|{processItem.ProcessName}|Handles,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.HandleCount}");

                            Log($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Memory|{processItem.ProcessName}|Current Usage,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.WorkingSet64 / 1000}");
                            Log($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Memory|{processItem.ProcessName}|Current Committed,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.PeakWorkingSet64 / 1000}");
                            Log($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Process|{processItem.ProcessName}|Thread Count,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.Threads.Count}");
                            Log($"name=Custom Metrics|Nodes|{System.Environment.MachineName}|Process|{processItem.ProcessName}|Handles,aggregator=OBSERVATION,time-rollup=AVERAGE,cluster-rollup=INDIVIDUAL,value={processItem.HandleCount}");
                        }
                    }
                }
            });

            metricTask.Wait();
        }
 public void Init()
 {
     monitoredAppPools = ConfigTools.GetConfiguredAppPools();
     monitoredApps     = ConfigTools.GetConfiguredApps();
     console           = Boolean.Parse(ConfigurationManager.AppSettings["ConsoleOutput"]);
     api = Boolean.Parse(ConfigurationManager.AppSettings["APIOutput"]);
     Program.Log($"Configuration console:{console}, api:{api}");
 }