コード例 #1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jsonObject = JObject.Load(reader);
            var value      = jsonObject.GetValue(nameof(AlertParameters.AlertType), StringComparison.OrdinalIgnoreCase);

            if (value.Type == JTokenType.Null)
            {
                return(null);
            }

            AlertParameters parameters;

            switch ((AlertType)value.Value <int>())
            {
            case AlertType.Hashrate:
                parameters = new HashrateAlertParameters();
                break;

            case AlertType.GpuThreshold:
                parameters = new GpuThresholdAlertParameters();
                break;

            case AlertType.Connectivity:
                parameters = new ConnectivityAlertParameters();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            serializer.Populate(jsonObject.CreateReader(), parameters);

            return(parameters);
        }
コード例 #2
0
        protected override Condition MapToCondition(GpuStats stats, GpuThresholdAlertParameters parameters)
        {
            if (stats.FanSpeed < parameters.MinValue)
            {
                return(Condition.Low);
            }
            if (stats.FanSpeed > parameters.MaxValue)
            {
                return(Condition.High);
            }

            return(Condition.Ok);
        }
コード例 #3
0
        protected override Condition MapToCondition(GpuStats stats, GpuThresholdAlertParameters parameters)
        {
            if (stats.EthereumHashrate / 1000m < parameters.MinValue)
            {
                return(Condition.Low);
            }
            if (stats.EthereumHashrate / 1000m > parameters.MaxValue)
            {
                return(Condition.High);
            }

            return(Condition.Ok);
        }
コード例 #4
0
        protected override AlertMetadata CreateMetadata(AlertMetadata metadata, GpuThresholdAlertParameters parameters, GpuConditionPeriod conditionPeriod)
        {
            var hashrates = conditionPeriod.GpuStats
                            .Select(s => (int?)s.EthereumHashrate)
                            .Concat(new[] { metadata?.Value?.Min, metadata?.Value?.Max })
                            .ToList();

            return(new AlertMetadata
            {
                GpuIndex = conditionPeriod.GpuIndex,
                Threshold = new AlertThresholdMetadata
                {
                    Min = parameters.MaxValue,
                    Max = parameters.MaxValue,
                    GpuMetric = Metric.Hashrate
                },
                Value = new AlertValueMetadata
                {
                    Condition = conditionPeriod.Condition,
                    Min = hashrates.Min(),
                    Max = hashrates.Max()
                }
            });
        }
コード例 #5
0
        private async Task <Alert> CreateAlertAsync(AlertDefinition definition, Miner miner, GpuThresholdAlertParameters parameters, GpuConditionPeriod conditionPeriod, CancellationToken token)
        {
            var metadata       = CreateMetadata(null, parameters, conditionPeriod);
            var detailMessages = CreateDetailMessages(metadata, parameters);

            return(await _alertFactory.CreateAlertAsync(definition, miner, metadata, DefaultAlertMessage, detailMessages, token));
        }
コード例 #6
0
 protected abstract IEnumerable <string> CreateDetailMessages(AlertMetadata metadata, GpuThresholdAlertParameters parameters);
コード例 #7
0
 protected abstract AlertMetadata CreateMetadata(AlertMetadata existingMetadata, GpuThresholdAlertParameters parameters, GpuConditionPeriod conditionPeriod);
コード例 #8
0
 protected abstract Condition MapToCondition(GpuStats stats, GpuThresholdAlertParameters parameters);
コード例 #9
0
        protected override IEnumerable <string> CreateDetailMessages(AlertMetadata metadata, GpuThresholdAlertParameters parameters)
        {
            var durationMessage = parameters.DurationMinutes == null ? null : $" for more than {parameters.DurationMinutes} minute(s)";

            if (metadata.Value.Condition == Condition.High)
            {
                yield return($"GPU {metadata.GpuIndex + 1} fan speed above threshold of {parameters.MaxValue}%{durationMessage}");
            }
            if (metadata.Value.Condition == Condition.Low)
            {
                yield return($"GPU {metadata.GpuIndex + 1} fan speed below threshold of {parameters.MinValue}%{durationMessage}");
            }

            yield return($"GPU {metadata.GpuIndex + 1} min fan speed during alert: {metadata.Value.Min}%");

            yield return($"GPU {metadata.GpuIndex + 1} max fan speed during alert: {metadata.Value.Max}%");
        }
コード例 #10
0
        protected override AlertMetadata CreateMetadata(AlertMetadata existingMetadata, GpuThresholdAlertParameters parameters, GpuConditionPeriod conditionPeriod)
        {
            var fanSpeeds = conditionPeriod.GpuStats
                            .Select(s => (int?)s.FanSpeed)
                            .Concat(new[] { existingMetadata?.Value?.Min, existingMetadata?.Value?.Max })
                            .ToList();

            return(new AlertMetadata
            {
                GpuIndex = conditionPeriod.GpuIndex,
                Threshold = new AlertThresholdMetadata
                {
                    Min = parameters.MaxValue,
                    Max = parameters.MaxValue,
                    GpuMetric = Metric.FanSpeed
                },
                Value = new AlertValueMetadata
                {
                    Condition = conditionPeriod.Condition,
                    Min = fanSpeeds.Min(),
                    Max = fanSpeeds.Max()
                }
            });
        }