Exemple #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);
        }
Exemple #2
0
        private static AlertMetadata CreateMetadata(AlertMetadata existingMetadata, HashrateAlertParameters parameters, IEnumerable <Snapshot> snapshots)
        {
            var hashRates = snapshots
                            .Select(s => (int?)s.MinerStatistics.Ethereum.Hashrate)
                            .Union(new[] { existingMetadata?.Value?.Min, existingMetadata?.Value?.Max })
                            .ToList();

            var metadata = new AlertMetadata
            {
                Value = new AlertValueMetadata
                {
                    Condition = Condition.Low,
                    Min       = hashRates.Min(),
                    Max       = hashRates.Max()
                },
                Threshold = new AlertThresholdMetadata
                {
                    Min = parameters.MinValue
                }
            };

            return(metadata);
        }
Exemple #3
0
        private static IEnumerable <ConditionPeriod> GetConditionPeriods(IEnumerable <Snapshot> snapshotsList, HashrateAlertParameters parameters)
        {
            Condition MapToCondition(Snapshot snapshot)
            {
                if (snapshot.MinerStatistics.Ethereum.Hashrate / 1000m < parameters.MinValue)
                {
                    return(Condition.Low);
                }

                return(Condition.Ok);
            }

            return
                (from conditionPeriod in snapshotsList.ToConditionPeriods(MapToCondition)
                 orderby conditionPeriod.Period.Start
                 select conditionPeriod);
        }
Exemple #4
0
        private async Task <Alert> CreateAlertAsync(AlertDefinition definition, Miner miner, HashrateAlertParameters parameters, IEnumerable <Snapshot> snapshots, CancellationToken token)
        {
            var metadata       = CreateMetadata(null, parameters, snapshots);
            var detailMessages = CreateDetailMessages(metadata, parameters);

            return(await _alertFactory.CreateAlertAsync(definition, miner, metadata, "Hashrate too low", detailMessages, token));
        }
Exemple #5
0
        private static IEnumerable <string> CreateDetailMessages(AlertMetadata metadata, HashrateAlertParameters parameters)
        {
            var durationMessage = parameters.DurationMinutes == null ? null : $" for more than {parameters.DurationMinutes} minute(s)";

            yield return($"Hashrate below threshold of {parameters.MinValue} MH/s{durationMessage}");

            yield return($"Min hashrate speed during alert: {metadata.Value.Min / 1000m} MH/s");

            yield return($"Max hashrate speed during alert: {metadata.Value.Max / 1000m} MH/s");
        }