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); }
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); }
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); }
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() } }); }
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)); }
protected abstract IEnumerable <string> CreateDetailMessages(AlertMetadata metadata, GpuThresholdAlertParameters parameters);
protected abstract AlertMetadata CreateMetadata(AlertMetadata existingMetadata, GpuThresholdAlertParameters parameters, GpuConditionPeriod conditionPeriod);
protected abstract Condition MapToCondition(GpuStats stats, GpuThresholdAlertParameters parameters);
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}%"); }
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() } }); }