コード例 #1
0
        public static async Task <ApiData> GetMinerStatsDataAsync(int port, AlgorithmType algorithmType, IEnumerable <MiningPair> miningPairs, string logGroup, double devFee)
        {
            var summaryApiResult = await GetApiDataSummary(port, logGroup);

            double totalSpeed = 0;
            int    totalPower = 0;

            if (!string.IsNullOrEmpty(summaryApiResult))
            {
                try
                {
                    var summaryOptvals = summaryApiResult.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var optvalPairs in summaryOptvals)
                    {
                        var pair = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        if (pair.Length != 2)
                        {
                            continue;
                        }
                        if (pair[0] == "KHS")
                        {
                            totalSpeed = double.Parse(pair[1], CultureInfo.InvariantCulture) * 1000; // HPS
                        }
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(logGroup, $"Error occured while getting API stats: {e.Message}");
                }
            }
            var threadsApiResult = await GetApiDataThreads(port, logGroup);

            var perDeviceSpeedInfo = new Dictionary <string, IReadOnlyList <AlgorithmTypeSpeedPair> >();
            var perDevicePowerInfo = new Dictionary <string, int>();

            if (!string.IsNullOrEmpty(threadsApiResult))
            {
                try
                {
                    var gpus       = threadsApiResult.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    var apiDevices = new List <IdPowerHash>();

                    foreach (var gpu in gpus)
                    {
                        var gpuOptvalPairs = gpu.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        var gpuData        = new IdPowerHash();
                        foreach (var optvalPairs in gpuOptvalPairs)
                        {
                            var optval = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            if (optval.Length != 2)
                            {
                                continue;
                            }
                            if (optval[0] == "GPU")
                            {
                                gpuData.id = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "POWER")
                            {
                                gpuData.power = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "KHS")
                            {
                                gpuData.speed = double.Parse(optval[1], CultureInfo.InvariantCulture) * 1000; // HPS
                            }
                        }
                        apiDevices.Add(gpuData);
                    }

                    foreach (var miningPair in miningPairs)
                    {
                        var deviceUUID = miningPair.Device.UUID;
                        var deviceID   = miningPair.Device.ID;

                        var apiDevice = apiDevices.Find(apiDev => apiDev.id == deviceID);
                        if (apiDevice.Equals(default(IdPowerHash)))
                        {
                            continue;
                        }
                        perDeviceSpeedInfo.Add(deviceUUID, new List <AlgorithmTypeSpeedPair>()
                        {
                            new AlgorithmTypeSpeedPair(algorithmType, apiDevice.speed * (1 - devFee * 0.01))
                        });
                        perDevicePowerInfo.Add(deviceUUID, apiDevice.power);
                        totalPower += apiDevice.power;
                    }
                }
                catch (Exception e)
                {
                    Logger.Error(logGroup, $"Error occured while getting API stats: {e.Message}");
                }
            }
            var ad = new ApiData();

            ad.AlgorithmSpeedsTotal = new List <AlgorithmTypeSpeedPair> {
                new AlgorithmTypeSpeedPair(algorithmType, totalSpeed * (1 - devFee * 0.01))
            };
            ad.PowerUsageTotal          = totalPower;
            ad.AlgorithmSpeedsPerDevice = perDeviceSpeedInfo;
            ad.PowerUsagePerDevice      = perDevicePowerInfo;

            return(ad);
        }
コード例 #2
0
        public async override Task <ApiData> GetMinerStatsDataAsync()
        {
            var api = new ApiData();
            var perDeviceSpeedInfo = new Dictionary <string, IReadOnlyList <(AlgorithmType type, double speed)> >();
            var perDevicePowerInfo = new Dictionary <string, int>();
            var totalSpeed         = 0d;
            var totalPowerUsage    = 0;

            try
            {
                var result = await ApiDataHelpers.GetApiDataAsync(_apiPort, "summary", _logGroup);

                api.ApiResponse = result;
                if (result == "")
                {
                    return(api);
                }

                //total speed
                if (!string.IsNullOrEmpty(result))
                {
                    try
                    {
                        var summaryOptvals = result.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (var optvalPairs in summaryOptvals)
                        {
                            var pair = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            if (pair.Length != 2)
                            {
                                continue;
                            }
                            if (pair[0] == "KHS")
                            {
                                totalSpeed = double.Parse(pair[1], CultureInfo.InvariantCulture) * 1000; // HPS
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Error(_logGroup, $"Error occured while getting API stats: {e.Message}");
                    }
                }

                var threadsApiResult = await ApiDataHelpers.GetApiDataAsync(_apiPort, "threads", _logGroup);

                if (!string.IsNullOrEmpty(threadsApiResult))
                {
                    try
                    {
                        var gpus       = threadsApiResult.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                        var apiDevices = new List <IdPowerHash>();

                        foreach (var gpu in gpus)
                        {
                            var gpuOptvalPairs = gpu.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                            var gpuData        = new IdPowerHash();
                            foreach (var optvalPairs in gpuOptvalPairs)
                            {
                                var optval = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                                if (optval.Length != 2)
                                {
                                    continue;
                                }
                                if (optval[0] == "GPU")
                                {
                                    gpuData.id = int.Parse(optval[1], CultureInfo.InvariantCulture);
                                }
                                if (optval[0] == "POWER")
                                {
                                    gpuData.power = int.Parse(optval[1], CultureInfo.InvariantCulture);
                                }
                                if (optval[0] == "KHS")
                                {
                                    gpuData.speed = double.Parse(optval[1], CultureInfo.InvariantCulture) * 1000; // HPS
                                }
                            }
                            apiDevices.Add(gpuData);
                        }

                        foreach (var miningPair in _miningPairs)
                        {
                            var deviceUUID = miningPair.Device.UUID;
                            var deviceID   = miningPair.Device.ID;

                            var apiDevice = apiDevices.Find(apiDev => apiDev.id == deviceID);
                            if (apiDevice.Equals(default(IdPowerHash)))
                            {
                                continue;
                            }
                            perDeviceSpeedInfo.Add(deviceUUID, new List <(AlgorithmType type, double speed)>()
                            {
                                (_algorithmType, apiDevice.speed * (1 - DevFee * 0.01))
                            });
                            perDevicePowerInfo.Add(deviceUUID, apiDevice.power);
                            totalPowerUsage += apiDevice.power;
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Error(_logGroup, $"Error occured while getting API stats: {e.Message}");
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error(_logGroup, $"Error occured while getting API stats: {e.Message}");
            }

            api.PowerUsageTotal          = totalPowerUsage;
            api.AlgorithmSpeedsPerDevice = perDeviceSpeedInfo;
            api.PowerUsagePerDevice      = perDevicePowerInfo;

            return(api);
        }