Ejemplo n.º 1
0
        /// <summary>
        /// Collect stats from EWBF and post to API
        /// </summary>
        public override async void ReportStatsAsyc()
        {
            try
            {
                // Call RPC and get response
                ClaymoreTemplate claymoreTemplate = await GetRPCResponse();

                if (claymoreTemplate == null)
                {
                    return;
                }

                // Map response to BPM Statistics object
                MinerMonitorStat minerMonitorStat = new MinerMonitorStat();
                minerMonitorStat = MapRPCResponse(claymoreTemplate);

                if (minerMonitorStat == null)
                {
                    return;
                }

                System.Threading.Thread.Sleep(2000);
                PostMinerMonitorStat(minerMonitorStat);
            }
            catch (Exception e)
            {
                NLogProcessing.LogError(e, "Error reporting stats for Claymore");
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Map Claymore response to BPM statistics objects
        /// </summary>
        /// <param name="claymoreTemplate"></param>
        /// <returns></returns>
        private MinerMonitorStat MapRPCResponse(ClaymoreTemplate claymoreTemplate)
        {
            try
            {
                // Create new Miner monitor stats object
                MinerMonitorStat minerMonitorStat = new MinerMonitorStat
                {
                    AccountGuid   = (Guid)Application.Current.Properties["AccountID"],
                    WorkerName    = Application.Current.Properties["WorkerName"].ToString(),
                    CoinType      = this.CoinType,
                    MinerBaseType = MinerBaseType
                };

                if (claymoreTemplate.result.Count > 0)
                {
                    List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>();
                    string[] hashRates = claymoreTemplate.result[3].Split(';');
                    string[] tempFans  = claymoreTemplate.result[6].Split(';');
                    for (int i = 0; i < hashRates.GetLength(0); i++)
                    {
                        // Create new GPU monitor stats object and map values
                        GPUMonitorStat gpuMonitorStat = new GPUMonitorStat
                        {
                            AccountGuid = (Guid)Application.Current.Properties["AccountID"],
                            WorkerName  = Application.Current.Properties["WorkerName"].ToString(),
                            CoinType    = this.CoinType.ToString(),
                            GPUID       = i,
                            // Returned hashrate is in MH. Format later, return in KH/s same as CCMiner for now
                            HashRate     = Convert.ToDecimal(hashRates[i]) * 1024,
                            FanSpeed     = 0, // Let OpenHardwareMonitor get the fanspeed
                            Temp         = Convert.ToInt16(tempFans[i * 2]),
                            Power        = 0,
                            HardwareType = Hardware
                        };

                        // Sum up power and hashrate
                        minerMonitorStat.Power    += gpuMonitorStat.Power;
                        minerMonitorStat.HashRate += gpuMonitorStat.HashRate;

                        // Add GPU stats to list
                        gpuMonitorStatList.Add(gpuMonitorStat);
                    }

                    // Set list of GPU monitor stats
                    minerMonitorStat.GPUMonitorStatList = gpuMonitorStatList;
                }

                return(minerMonitorStat);
            }
            catch (Exception e)
            {
                NLogProcessing.LogError(e, "Error mapping RPC Response for claymore miner");
                return(null);
            }
        }