Beispiel #1
0
            public DeviceMiningStats DeepCopy()
            {
                var copy = new DeviceMiningStats
                {
                    // BaseStats
                    MinerName                  = this.MinerName,
                    GroupKey                   = this.GroupKey,
                    Speeds                     = this.Speeds.ToList(),
                    Rates                      = this.Rates.ToList(),
                    PowerUsageAPI              = this.PowerUsageAPI,
                    PowerUsageDeviceReading    = this.PowerUsageDeviceReading,
                    PowerUsageAlgorithmSetting = this.PowerUsageAlgorithmSetting,
                    // DeviceMiningStats
                    DeviceUUID = this.DeviceUUID
                };

                return(copy);
            }
Beispiel #2
0
        private static void UpdateDeviceMiningStats(ApiData apiData, string minerUUID, string minerName, string groupKey, string deviceUuid, Dictionary <AlgorithmType, double> payingRates)
        {
            DeviceMiningStats stat;

            if (_devicesMiningStats.TryGetValue(deviceUuid, out stat) == false)
            {
                // create if it doesn't exist
                stat = new DeviceMiningStats {
                    DeviceUUID = deviceUuid
                };
                _devicesMiningStats[deviceUuid] = stat;
            }
            stat.Clear();
            // re-set miner name and group key
            stat.MinerName = minerName;
            stat.GroupKey  = groupKey;

            // update stat
            var deviceSpeedsInfo = apiData.AlgorithmSpeedsPerDevice
                                   .Where(pair => pair.Key == deviceUuid)
                                   .Select(pair => pair.Value)
                                   .FirstOrDefault();

            if (deviceSpeedsInfo != null)
            {
                foreach (var speedInfo in deviceSpeedsInfo)
                {
                    stat.Speeds.Add((speedInfo.AlgorithmType, speedInfo.Speed));
                    if (payingRates.TryGetValue(speedInfo.AlgorithmType, out var paying) == false)
                    {
                        continue;
                    }
                    var payingRate = paying * speedInfo.Speed * 0.000000001;
                    stat.Rates.Add((speedInfo.AlgorithmType, payingRate));
                }
            }

            var devicePowerUsageApi = (double)apiData.PowerUsagePerDevice
                                      .Where(pair => pair.Key == deviceUuid)
                                      .Select(pair => pair.Value)
                                      .FirstOrDefault();

            stat.PowerUsageAPI = devicePowerUsageApi / 1000d;

            // TODO Globals
            var dev = AvailableDevices.GetDeviceWithUuid(deviceUuid);

            if (dev != null)
            {
                stat.PowerUsageDeviceReading = dev.PowerUsage;
                var algo = dev.GetAlgorithm(minerUUID, apiData.AlgorithmSpeedsPerDevice[dev.Uuid].Select(info => info.AlgorithmType).ToArray());
                stat.PowerUsageAlgorithmSetting = algo == null ? 0d : algo.PowerUsage;
            }

            lock (_devMiningStats)
            {
                var index = _devMiningStats.IndexOf(stat);
                if (index < 0)
                {
                    _devMiningStats.Add(stat);
                }
                else
                {
                    _devMiningStats[index] = stat;
                }
            }

            //// TODO enable StabilityAnalyzer
            //// TODO not the best place but here is where we get our per device speeds
            //var algorithmName = string.Join("+", stat.Speeds.Select(speedPair => Enum.GetName(typeof(AlgorithmType), speedPair.type)));
            //var algorithmStringID = $"{algorithmName}_{minerUUID}";
            //var speedID = $"{deviceUuid}-{algorithmStringID}";
            //var primarySpeed = stat.Speeds.Count > 0 ? stat.Speeds[0].speed : 0d;
            //var secondarySpeed = stat.Speeds.Count > 1 ? stat.Speeds[1].speed : 0d;
            //var miningSpeed = new BenchmarkingAnalyzer.MiningSpeed
            //{
            //    PrimarySpeed = primarySpeed,
            //    SecondarySpeed = secondarySpeed,
            //    Timestamp = DateTime.Now
            //};
            //BenchmarkingAnalyzer.UpdateMiningSpeeds(speedID, miningSpeed);
        }