예제 #1
0
        /// <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");
            }
        }
예제 #2
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);
            }
        }
예제 #3
0
        /// <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);
            }
        }