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); }
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); }