/// <summary> /// Collect stats from TRex and post to API /// </summary> public override async void ReportStatsAsyc() { try { // Call RPC and get response TRexTemplate trexTemplate = await GetRPCResponse(); if (trexTemplate == null) { return; } // Map response to BPM Statistics object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat = MapRPCResponse(trexTemplate); if (minerMonitorStat == null) { return; } System.Threading.Thread.Sleep(8000); PostMinerMonitorStat(minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error reporting stats for TRex"); } }
/// <summary> /// Map TRex response to BPM statistics objects /// </summary> /// <param name="trexTemplate"></param> /// <returns></returns> private MinerMonitorStat MapRPCResponse(TRexTemplate trexTemplate) { 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; if (trexTemplate.gpus.Count > 0) { List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (GPUList trexGPU in trexTemplate.gpus) { // 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 = trexGPU.device_id, HashRate = trexGPU.hashrate, FanSpeed = (short)trexGPU.fan_speed, Temp = (short)trexGPU.temperature, Power = (short)trexGPU.power, HardwareType = Hardware }; // Sum up power and hashrate minerMonitorStat.Power += trexGPU.power; minerMonitorStat.HashRate += trexGPU.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 TRex miner"); return(null); } }
/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <TRexTemplate> GetRPCResponse() { try { string apiURL = String.Format("http://{0}:{1}/summary", HostName, ApiPort); TRexTemplate trexTemplate = DownloadSerializedJSONData <TRexTemplate>(apiURL); return(trexTemplate); } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from TRex miner on port {ApiPort}"); // Return null object; return(null); } }