public void StatsUpdaterWorker()
        {
            var usages = new CpuRamUsage();
            var cpuUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total");
            var TotalRam = new PerformanceCounter("Memory", "Available MBytes");
            while (true)
            {
                // Update Cpu/Ram Usage
                usages.Update();

                double diabloCpuUsage = 0;
                long diabloRamUsage = 0;
                int diabloCount = 0;
                double demonbuddyCpuUsage = 0;
                long demonbuddyRamUsage = 0;
                int demonbuddyCount = 0;

                foreach (var bot in BotSettings.Instance.Bots)
                {
                    // Update bot uptime
                    bot.RunningTime = bot.IsRunning ? DateTime.Now.Subtract(bot.StartTime).ToString(@"hh\hmm\mss\s") : "";

                    // Calculate total Cpu/Ram usage for Diablo
                    if (bot.Diablo.IsRunning)
                    {
                        try
                        {
                            var usage = usages.GetUsageById(bot.Diablo.Proc.Id);
                            diabloCpuUsage += usage.Cpu;
                            diabloRamUsage += usage.Memory;
                            diabloCount++;
                        }
                        catch
                        {}
                    }
                    // Calculate total Cpu/Ram usage for Demonbuddy
                    if (bot.Demonbuddy.IsRunning)
                    {
                        try
                        {
                            var usage = usages.GetUsageById(bot.Demonbuddy.Proc.Id);
                            demonbuddyCpuUsage += usage.Cpu;
                            demonbuddyRamUsage += usage.Memory;
                            demonbuddyCount++;
                        }
                        catch
                        {}
                    }

                }
                // Update Stats label on mainform
                updateMainformStatsLabel(
                    string.Format("Cpu Usage : Diablo[{0}] {1}%, Demonbuddy[{2}] {3}%, Total {4}%" + Environment.NewLine +
                                  "Ram Usage : Diablo[{0}] {5}Gb, Demonbuddy[{2}] {6}Mb, Total {7}Gb",
                                  diabloCount, Math.Round(diabloCpuUsage,1), demonbuddyCount, Math.Round(demonbuddyCpuUsage,1), Math.Round(diabloCpuUsage+demonbuddyCpuUsage,1),
                                  Math.Round(diabloRamUsage / Math.Pow(2 , 30), 2), Math.Round(demonbuddyRamUsage / Math.Pow(2 , 20),2), Math.Round((diabloRamUsage / Math.Pow(2,30)) + (demonbuddyRamUsage / Math.Pow(2,30)), 2)));
                Thread.Sleep(500);
            }
        }
Exemplo n.º 2
0
        public void StatsUpdaterWorker()
        {
            // Wait here till mainform is up
            while (Program.Mainform == null)
                Thread.Sleep(100);

            var usages = new CpuRamUsage();
            long totalRam = PerformanceInfo.GetTotalMemory();

            prepareMainGraphCpu();
            prepareMainGraphMemory();
            prepareMainGraphConnections();
            prepareMainGraphGold();
            while (true)
            {
                // Update Cpu/Ram Usage
                usages.Update();

                double diabloCpuUsage = 0;
                long diabloRamUsage = 0;
                int diabloCount = 0;
                double demonbuddyCpuUsage = 0;
                long demonbuddyRamUsage = 0;
                int demonbuddyCount = 0;
                double goldPerHour = 0;
                double totalGold = 0;
                lock (BotSettings.Instance)
                {
                    foreach (BotClass bot in BotSettings.Instance.Bots.ToList())
                    {
                        ChartStats chartStats = bot.ChartStats;
                        // Update bot uptime
                        bot.RunningTime = bot.IsRunning
                            ? DateTime.UtcNow.Subtract(bot.StartTime).ToString(@"hh\hmm\mss\s")
                            : "";

                        // Update bot specific Chart stats
                        CreateChartStats(bot, Program.Mainform.GoldStats, ChartValueType.Double);

                        if (bot.IsRunning)
                        {
                            #region Calculate System Usage

                            if (bot.Diablo.IsRunning)
                            {
                                // Calculate total Cpu/Ram usage for Diablo
                                try
                                {
                                    CpuRamUsage.Usage usage = usages.GetUsageById(bot.Diablo.Proc.Id);
                                    diabloCpuUsage += usage.Cpu;
                                    diabloRamUsage += usage.Memory;
                                    diabloCount++;
                                }
                                catch
                                {
                                }
                            }

                            if (bot.Demonbuddy.IsRunning)
                            {
                                // Calculate total Cpu/Ram usage for Demonbuddy
                                try
                                {
                                    CpuRamUsage.Usage usage = usages.GetUsageById(bot.Demonbuddy.Proc.Id);
                                    demonbuddyCpuUsage += usage.Cpu;
                                    demonbuddyRamUsage += usage.Memory;
                                    demonbuddyCount++;
                                }
                                catch
                                {
                                }
                            }

                            #endregion

                            #region Gold Stats

                            chartStats.GoldStats.Update(bot); // Update Current bot

                            // Calculate total gold for all bots
                            goldPerHour += chartStats.GoldStats.GoldPerHour;
                            totalGold += chartStats.GoldStats.LastCoinage;

                            Series serie = Program.Mainform.GoldStats.Series.FirstOrDefault(x => x.Name == bot.Name);
                            if (serie != null)
                            {
                                updateMainformGraph(Program.Mainform.GoldStats, serie.Name,
                                    Math.Round(chartStats.GoldStats.GoldPerHour), (int)Settings.Default.StatsGphHistory,
                                    autoscale: true);
                            }

                            #endregion
                        }
                    }
                }
                try
                {
                    // add to Cpu graph
                    Chart graph = Program.Mainform.CpuUsage;
                    double allusage = diabloCpuUsage + demonbuddyCpuUsage;
                    updateMainformGraph(graph, "All Usage", allusage,
                        legend: string.Format("All usage: {0,11}%", allusage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Diablo", diabloCpuUsage,
                        legend: string.Format("Diablo: {0,16}%", diabloCpuUsage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Demonbuddy", demonbuddyCpuUsage,
                        legend: string.Format("Demonbuddy: {0,4}%", demonbuddyCpuUsage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Total System", Math.Round(usages.TotalCpuUsage, 2),
                        legend: string.Format("Total System: {0,2}%", usages.TotalCpuUsage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsCPUHistory);

                    // add to Memory graph
                    graph = Program.Mainform.MemoryUsage;
                    allusage = (double)(diabloRamUsage + demonbuddyRamUsage) / totalRam * 100;
                    double diablousage = (double)diabloRamUsage / totalRam * 100;
                    double demonbuddyusage = (double)demonbuddyRamUsage / totalRam * 100;
                    updateMainformGraph(graph, "All Usage", allusage,
                        legend:
                            string.Format("All usage: {0,11}%",
                                ((double)(diabloRamUsage + demonbuddyRamUsage) / totalRam * 100).ToString("000.0")),
                        limit: (int)Settings.Default.StatsMemoryHistory);
                    updateMainformGraph(graph, "Diablo", diablousage,
                        legend: string.Format("Diablo: {0,16}%", diablousage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsMemoryHistory);
                    updateMainformGraph(graph, "Demonbuddy", demonbuddyusage,
                        legend: string.Format("Demonbuddy: {0,4}%", demonbuddyusage.ToString("000.0")),
                        limit: (int)Settings.Default.StatsMemoryHistory);
                    double mem = (double)PerformanceInfo.GetPhysicalUsedMemory() / totalRam * 100;
                    updateMainformGraph(graph, "Total System", mem,
                        legend: string.Format("Total System: {0,2}%", mem.ToString("000.0")),
                        limit: (int)Settings.Default.StatsMemoryHistory);

                    // add to Connection graph
                    updateMainformGraph(Program.Mainform.CommConnections, "Connections", Communicator.StatConnections,
                        legend: string.Format("Connections {0}", Communicator.StatConnections), autoscale: true,
                        limit: (int)Settings.Default.StatsConnectionsHistory);
                    updateMainformGraph(Program.Mainform.CommConnections, "Failed", Communicator.StatFailed,
                        legend: string.Format("Failed {0}", Communicator.StatFailed), autoscale: true,
                        limit: (int)Settings.Default.StatsConnectionsHistory);
                    Communicator.StatConnections = 0;
                    Communicator.StatFailed = 0;

                    // add to Gold Graph
                    updateMainformGraph(Program.Mainform.GoldStats, "Gph", Math.Round(goldPerHour),
                        legend: string.Format("Gph {0}", Math.Round(goldPerHour)), autoscale: true,
                        limit: (int)Settings.Default.StatsGphHistory);
                    updateMainformLabel(Program.Mainform.CashPerHour,
                        string.Format("{0:C2}", (goldPerHour / 1000000 * (double)Settings.Default.StatsGoldPrice)));
                    updateMainformLabel(Program.Mainform.CurrentCash,
                        string.Format("{0:C2}", (totalGold / 1000000 * (double)Settings.Default.StatsGoldPrice)));
                    updateMainformLabel(Program.Mainform.TotalGold, string.Format("{0:N0}", totalGold));
                }
                catch (Exception ex)
                {
                    DebugHelper.Exception(ex);
                }
                Thread.Sleep((int)Settings.Default.StatsUpdateRate);
            }
        }