public static Dictionary <string, string>[] Request(string ip, int port, string message) { string responseData = ""; try { using (TcpClient client = new TcpClient(ip, port)) { using (NetworkStream stream = client.GetStream()) { byte[] data = Encoding.ASCII.GetBytes(message); stream.Write(data, 0, data.Length); stream.Flush(); data = new Byte[4096]; int bytes = stream.Read(data, 0, data.Length); responseData = Encoding.ASCII.GetString(data, 0, bytes); } } } catch (Exception e) { NLogProcessing.LogError(e, $"Error getting Request from ccminer on port {port}"); return(null); } return(ConvertPruvotToDictArray(responseData)); }
/// <summary> /// Collect stats from WildRig and post to API /// </summary> public override async void ReportStatsAsyc() { try { // Call RPC and get response WildRigTemplate wildRigTemplate = await GetRPCResponse(); if (wildRigTemplate == null) { return; } // Map response to BPM Statistics object MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); minerMonitorStat = MapRPCResponse(wildRigTemplate); if (minerMonitorStat == null) { return; } System.Threading.Thread.Sleep(8000); PostMinerMonitorStat(minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error reporting stats for WildRig"); } }
/// <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> /// Read object from file and deserialize JSON and map to object /// </summary> /// <returns></returns> public ObservableCollection <AccountMinerTypeExtraParams> ReadJsonFromFile() { string filePath = Path.Combine(FileConstants.ConfigFilePath(), FileNameConstants.MinerTypeExtraParamsFileName); // Create new empty list of miner type extra params ObservableCollection <AccountMinerTypeExtraParams> accountMinerTypeExtraParamsList = new ObservableCollection <AccountMinerTypeExtraParams>(); try { if (File.Exists(filePath)) { // deserialize JSON directly from a file using (StreamReader file = File.OpenText(filePath)) { JsonSerializer serializer = new JsonSerializer(); accountMinerTypeExtraParamsList = (ObservableCollection <AccountMinerTypeExtraParams>)serializer.Deserialize(file, typeof(ObservableCollection <AccountMinerTypeExtraParams>)); } } else { accountMinerTypeExtraParamsList = InitEmptyMinerTypeExtraParams(); } return(accountMinerTypeExtraParamsList); } catch (Exception e) { accountMinerTypeExtraParamsList = InitEmptyMinerTypeExtraParams(); NLogProcessing.LogError(e, "Miner type extra parameters could not be loaded. Using default values."); // Return defaults return(accountMinerTypeExtraParamsList); } }
/// <summary> /// Read object from file and deserialize JSON and map to object /// </summary> /// <returns></returns> public WorkerSettings ReadJsonFromFile() { string filePath = Path.Combine(FileConstants.ConfigFilePath(), FileNameConstants.WorkerSettingsFileName); WorkerSettings workerSettings = new WorkerSettings(); try { if (File.Exists(filePath)) { // deserialize JSON directly from a file using (StreamReader file = File.OpenText(filePath)) { JsonSerializer serializer = new JsonSerializer(); workerSettings = (WorkerSettings)serializer.Deserialize(file, typeof(WorkerSettings)); } } else { workerSettings = InitEmptyWorkerSettings(workerSettings); } return(workerSettings); } catch (Exception e) { workerSettings = InitEmptyWorkerSettings(workerSettings); NLogProcessing.LogError(e, "Worker settings could not be loaded. Using default values."); // Return defaults return(workerSettings); } }
/// <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> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <ClaymoreTemplate> GetRPCResponse() { var jsonSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore, Culture = CultureInfo.InvariantCulture }; ClaymoreTemplate claymoreTemplate; try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { string get_menu_request = "{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"miner_getstat1\"}\n"; NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(get_menu_request); await serverStream.WriteAsync(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; var totalBytesRead = await serverStream.ReadAsync(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream, 0, totalBytesRead); claymoreTemplate = JsonConvert.DeserializeObject <ClaymoreTemplate>(returndata, jsonSettings); // Close socket clientSocket.Close(); clientSocket = null; return(claymoreTemplate); } else { NLogProcessing.LogInfo($"Could not connect to claymore miner socket on port {ApiPort}"); // Return null object; return(null); } } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from claymore miner on port {ApiPort}"); // Return null object; 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); } }
/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <DSTMTemplate> GetRPCResponse() { DSTMTemplate dstmTemplate; try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { string get_menu_request = "{\"id\":1, \"method\":\"getstat\"}\n"; 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.Substring(0, _returndata.LastIndexOf("}") + 1); dstmTemplate = JsonConvert.DeserializeObject <DSTMTemplate>(jsonData); // Close socket clientSocket.Close(); clientSocket = null; return(dstmTemplate); } else { NLogProcessing.LogInfo($"Could not connect to DSTM miner socket on port {ApiPort}"); // Return null object; return(null); } } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from DSTM miner on port {ApiPort}"); // Return null object; return(null); } }
/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <WildRigTemplate> GetRPCResponse() { try { string apiURL = String.Format("http://{0}:{1}", HostName, ApiPort); WildRigTemplate wildRigTemplate = DownloadSerializedJSONData <WildRigTemplate>(apiURL); return(wildRigTemplate); } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from WildRig miner on port {ApiPort}"); // Return null object; return(null); } }
public async override void ReportStatsAsyc(Guid accountId, string workerName) { try { var minerMonitorStat = await GetRPCResponse(accountId, workerName); if (minerMonitorStat == null) { return; } System.Threading.Thread.Sleep(4000); PostMinerMonitorStat(accountId, workerName, minerMonitorStat); } catch (Exception e) { NLogProcessing.LogError(e, "Error reporting stats for Ccminer"); } }
/// <summary> /// Read object from file and deserialize JSON and map to object /// </summary> /// <returns></returns> public AccountIdentity ReadJsonFromFile() { string filePath = Path.Combine(FileConstants.ConfigFilePath(), FileNameConstants.AccountIdentityFileName); AccountIdentity accountIdentity = new AccountIdentity(); try { if (File.Exists(filePath)) { // deserialize JSON directly from a file using (StreamReader file = File.OpenText(filePath)) { JsonSerializer serializer = new JsonSerializer(); accountIdentity = (AccountIdentity)serializer.Deserialize(file, typeof(AccountIdentity)); } } return(accountIdentity); } catch (Exception e) { NLogProcessing.LogError(e, "Could not load Account Identity file."); return(accountIdentity); } }
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); } }
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); } }