/// <summary> /// Collect stats from XMRig and post to API /// </summary> public override async void ReportStatsAsyc() { try { // Call RPC and get response XMRigTemplate xmrigTemplate = await GetRPCResponse(); if (xmrigTemplate == null) { return; } // Map response to BPM Statistics object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat = MapRPCResponse(xmrigTemplate); if (minerMonitorStat == null) { return; } System.Threading.Thread.Sleep(8000); PostMinerMonitorStat(minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error reporting stats for XMRig"); } }
/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <XMRigTemplate> GetRPCResponse() { try { string apiURL = String.Format("http://{0}:{1}", HostName, ApiPort); XMRigTemplate xmrigTemplate = DownloadSerializedJSONData <XMRigTemplate>(apiURL); return(xmrigTemplate); } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from XMRig miner on port {ApiPort}"); // Return null object; return(null); } }
/// <summary> /// Map XMRig response to BPM statistics objects /// </summary> /// <param name="XMRigTemplate"></param> /// <returns></returns> private MinerMonitorStat MapRPCResponse(XMRigTemplate xmrigTemplate) { try { // Create new Miner monitor stats object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; minerMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); minerMonitorStat.CoinType = this.CoinType; minerMonitorStat.MinerBaseType = MinerBaseType; List <GPUMonitorStat> gpuMonitorStatsList = new List <GPUMonitorStat>(); GPUMonitorStat gpuMonitorStat = new GPUMonitorStat(); gpuMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; gpuMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); gpuMonitorStat.CoinType = this.CoinType.ToString(); gpuMonitorStat.GPUID = 0; gpuMonitorStat.HardwareName = xmrigTemplate.cpu.brand; gpuMonitorStat.HashRate = (decimal)xmrigTemplate.hashrate.highest; gpuMonitorStat.FanSpeed = 0; gpuMonitorStat.Temp = 0; gpuMonitorStat.Power = 0; gpuMonitorStat.HardwareType = Hardware; // Sum up power and hashrate minerMonitorStat.Power += 0; minerMonitorStat.HashRate += gpuMonitorStat.HashRate; // Add GPU stats to list gpuMonitorStatsList.Add(gpuMonitorStat); // Set list of GPU monitor stats minerMonitorStat.GPUMonitorStatList = gpuMonitorStatsList; return(minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error mapping RPC Response for XMRig miner"); return(null); } }