/// <summary> /// Collect stats from EWBF and post to API /// </summary> public override async void ReportStatsAsyc(Guid accountId, string workerName) { try { // Call RPC and get response DSTMTemplate dstmTemplate = await GetRPCResponse(); if (dstmTemplate == null) { return; } // Map response to BPM Statistics object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat = MapRPCResponse(accountId, workerName, dstmTemplate); if (minerMonitorStat == null) { return; } System.Threading.Thread.Sleep(6000); PostMinerMonitorStat(accountId, workerName, minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error reporting stats for DSTM"); } }
/// <summary> /// Map DSTM response to BPM statistics objects /// </summary> /// <param name="dstmTemplate"></param> /// <returns></returns> private MinerMonitorStat MapRPCResponse(Guid accountId, string workerName, DSTMTemplate dstmTemplate) { try { // Create new Miner monitor stats object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat.AccountGuid = accountId; minerMonitorStat.WorkerName = workerName; minerMonitorStat.CoinType = this.CoinType; minerMonitorStat.MinerBaseType = MinerBaseType; if (dstmTemplate.result.Count > 0) { List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (DSTMOBjectTemplate dstmOBjectTemplate in dstmTemplate.result) { // Create new GPU monitor stats object and map values GPUMonitorStat gpuMonitorStat = new GPUMonitorStat { AccountGuid = accountId, WorkerName = workerName, CoinType = this.CoinType, GPUID = dstmOBjectTemplate.gpu_id, HashRate = dstmOBjectTemplate.sol_ps, FanSpeed = 0, Temp = (short)dstmOBjectTemplate.temperature, Power = (short)dstmOBjectTemplate.power_usage, HardwareType = Hardware }; // Sum up power and hashrate minerMonitorStat.Power += (short)dstmOBjectTemplate.power_usage; minerMonitorStat.HashRate += dstmOBjectTemplate.sol_ps; // 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 DSTM miner"); return(null); } }