/// <summary> /// Map WildRig response to BPM statistics objects /// </summary> /// <param name="wildRigTemplate"></param> /// <returns></returns> private MinerMonitorStat MapRPCResponse(WildRigTemplate wildRigTemplate) { try { // Used to simulate GPU ID int gpuCounter = 0; // 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 (wildRigTemplate.hashrate.threads.Count > 0) { List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (List <int> wildRigGPU in wildRigTemplate.hashrate.threads) { // 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 = gpuCounter, //wildRigGPU.device_id, HashRate = wildRigGPU[0], FanSpeed = 0, //(short)wildRigGPU.fan_speed, Temp = 0, //(short)wildRigGPU.temperature, Power = 0, //(short)wildRigGPU.power, HardwareType = Hardware }; // Sum up power and hashrate minerMonitorStat.Power += 0; //wildRigGPU.power; minerMonitorStat.HashRate += wildRigGPU[0]; // Add GPU stats to list gpuMonitorStatList.Add(gpuMonitorStat); // Increase GPU Counter gpuCounter++; } // Set list of GPU monitor stats minerMonitorStat.GPUMonitorStatList = gpuMonitorStatList; } return(minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error mapping RPC Response for WildRig miner"); return(null); } }
/// <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); } }
/// <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); } }
/// <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> /// 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); } }
private async Task <MinerMonitorStat> GetRPCResponse(Guid accountId, string workerName) { MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); try { var dictHW = PruvotApi.GetHwInfo(HostName, ApiPort); var dictHist = PruvotApi.GetHistory(HostName, ApiPort); minerMonitorStat.AccountGuid = accountId; minerMonitorStat.WorkerName = workerName; minerMonitorStat.CoinType = CoinType; minerMonitorStat.MinerBaseType = MinerBaseType; var gpuList = (from element in dictHist orderby element["GPU"] ascending select element["GPU"]).Distinct(); List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (var gpuNumber in gpuList) { var gpuHash = (from element in dictHist orderby element["GPU"] ascending, element["TS"] descending where element["GPU"] == gpuNumber select element).FirstOrDefault(); var gpuHw = (from hw in dictHW where hw["GPU"] == gpuNumber select hw).FirstOrDefault(); // Create new GPU monitor stats object and map values GPUMonitorStat gpuMonitorStat = new GPUMonitorStat(); gpuMonitorStat.AccountGuid = accountId; gpuMonitorStat.WorkerName = workerName; gpuMonitorStat.CoinType = CoinType; gpuMonitorStat.GPUID = Convert.ToInt32(gpuNumber); gpuMonitorStat.HashRate = (Convert.ToDecimal(gpuHash["KHS"])); gpuMonitorStat.FanSpeed = Convert.ToInt16(gpuHw["FAN"]); gpuMonitorStat.Temp = (short)Convert.ToDecimal(gpuHw["TEMP"]); gpuMonitorStat.Power = (short)(Convert.ToDecimal(gpuHw["POWER"]) / 1000); gpuMonitorStat.HardwareType = Hardware; // Sum up power and hashrate minerMonitorStat.Power += (short)gpuMonitorStat.Power; minerMonitorStat.HashRate += gpuMonitorStat.HashRate; // Add GPU stats to list gpuMonitorStatList.Add(gpuMonitorStat); } // Set list of GPU monitor stats minerMonitorStat.GPUMonitorStatList = gpuMonitorStatList; return(await Task.Run(() => { return minerMonitorStat; })); } catch (Exception ex) { NLogProcessing.LogError(ex, "Error calling GetRPCResponse from miner."); // Return null object; return(null); } }
private async Task <MinerMonitorStat> GetRPCResponse() { MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { //string get_menu_request = "{\"id\":1, \"method\":\"getstat\"}\n"; //string get_menu_request = "{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"miner_getstat1\"}\n"; string get_menu_request = "summary"; NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(get_menu_request); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; await serverStream.ReadAsync(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream); string[] jsonData = returndata.Split(','); //ewbfTemplate = JsonConvert.DeserializeObject<EWBFTemplate>(jsonData); // Close socket clientSocket.Close(); clientSocket = null; } else { NLogProcessing.LogInfo($"Could not connect to EWBF miner socket on port {ApiPort}"); // Return null object; return(null); } //var dictHW = PruvotApi.GetHwInfo(HostName, ApiPort); //var dictHist = PruvotApi.GetHistory(HostName, ApiPort); minerMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; minerMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); minerMonitorStat.CoinType = CoinType; minerMonitorStat.MinerBaseType = MinerBaseType; var gpuList = new List <int> [0, 1, 2]; //(from element in dictHist // orderby element["GPU"] ascending // select element["GPU"]).Distinct(); List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (var gpuNumber in gpuList) { //var gpuHash = (from element in dictHist // orderby element["GPU"] ascending, element["TS"] descending // where element["GPU"] == gpuNumber // select element).FirstOrDefault(); //var gpuHw = (from hw in dictHW // where hw["GPU"] == gpuNumber // select hw).FirstOrDefault(); // Create new GPU monitor stats object and map values GPUMonitorStat gpuMonitorStat = new GPUMonitorStat(); gpuMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; gpuMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); gpuMonitorStat.CoinType = CoinType.ToString(); gpuMonitorStat.GPUID = Convert.ToInt32(gpuNumber); //gpuMonitorStat.HashRate = (Convert.ToDecimal(gpuHash["KHS"])); //gpuMonitorStat.FanSpeed = Convert.ToInt16(gpuHw["FAN"]); //gpuMonitorStat.Temp = (short)Convert.ToDecimal(gpuHw["TEMP"]); //gpuMonitorStat.Power = (short)(Convert.ToDecimal(gpuHw["POWER"]) / 1000); gpuMonitorStat.HardwareType = Hardware; // Sum up power and hashrate minerMonitorStat.Power += (short)gpuMonitorStat.Power; minerMonitorStat.HashRate += gpuMonitorStat.HashRate; // Add GPU stats to list gpuMonitorStatList.Add(gpuMonitorStat); } // Set list of GPU monitor stats minerMonitorStat.GPUMonitorStatList = gpuMonitorStatList; return(await Task.Run(() => { return minerMonitorStat; })); } catch (Exception ex) { NLogProcessing.LogError(ex, "Error calling GetRPCResponse from miner."); // Return null object; return(null); } }