/// <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);
            }
        }
示例#2
0
        /// <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");
            }
        }
示例#3
0
        /// <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>
        /// 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);
            }
        }
示例#5
0
        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));
        }
示例#6
0
        /// <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);
            }
        }
示例#7
0
        /// <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);
            }
        }
示例#8
0
        /// <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);
            }
        }
示例#9
0
        /// <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);
            }
        }
示例#10
0
        /// <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);
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        /// <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);
            }
        }
示例#13
0
        /// <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);
            }
        }
示例#14
0
        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");
            }
        }
示例#15
0
        /// <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);
            }
        }
 /// <summary>
 /// Stop mining and close window
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 {
     MainWindowViewModel.CommandStopMining.Execute(null);
     NLogProcessing.StopLoggingMainWindowClose();
     Application.Current.Shutdown();
 }
示例#17
0
        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);
            }
        }
示例#18
0
 /// <summary>
 /// Setup logging
 /// </summary>
 private void SetupLogging()
 {
     NLogProcessing.SetupLogging();
     NLogProcessing.StartLogging();
 }
示例#19
0
        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);
            }
        }