/// <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"); } }
/// <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); } }