public CalculatedPollution[] CalculatePollutions(DateTime date, AirQualityPersisted state) { logger.LogInfo().WithCategory(LogCategory.AirQuality).WithMessage($"Calculating pollutions").Commit(); CalculatedPollution[] pollution = new CalculatedPollution[] { CalculatePollution(date, Measurement.PM10, state.PM10, CalculatePM10PollutionIndex(state.PM10?.Value ?? 0)), CalculatePollution(date, Measurement.O3, state.O3, CalculateO3PollutionIndex(state.O3?.Value ?? 0)), CalculatePollution(date, Measurement.NO2, state.NO2, CalculateNO2PollutionIndex(state.NO2?.Value ?? 0)), CalculatePollution(date, Measurement.SO2, state.SO2, CalculateSO2PollutionIndex(state.SO2?.Value ?? 0)) }; return(pollution); }
public CalculatedPollution[] CalculatePollution(AirQualityData data) { logger.LogInformation("Calculating pollution"); CalculatedPollution[] pollution = new CalculatedPollution[] { CalculatePollution(data.Date, Measurement.PM10, data.PM10, CalculatePM10PollutionIndex(data.PM10 ?? 0)), CalculatePollution(data.Date, Measurement.O3, data.O3, CalculateO3PollutionIndex(data.O3 ?? 0)), CalculatePollution(data.Date, Measurement.NO2, data.NO2, CalculateNO2PollutionIndex(data.NO2 ?? 0)), CalculatePollution(data.Date, Measurement.SO2, data.SO2, CalculateSO2PollutionIndex(data.SO2 ?? 0)) }; return(pollution); }
public static CalculatedPollution CalculateMaxPollution(CalculatedPollution[] pollutions) { CalculatedPollution result = null; foreach (var pollution in pollutions) { if (result == null || pollution.Index > result.Index) { result = pollution; } } return(result); }
public CalculatedPollution CalculatePollution(DateTime measurementDate, Measurement measurement, AirQualityValue value, double?index) { CalculatedPollution result = new CalculatedPollution { Measurement = measurement, Index = value?.Value ?? 0 }; bool isOutdated = false; if (value == null || (isOutdated = (measurementDate - value.LastDate).TotalHours > 4)) { result.Pollution = AirPollution.Low; result.Index = 0; } else { if (index.Value < 50) { result.Pollution = AirPollution.Low; } else if (index < 75) { result.Pollution = AirPollution.Mid; } else if (index < 100) { result.Pollution = AirPollution.High; } else { result.Pollution = AirPollution.VeryHigh; } result.Index = index.Value; } string outdatedText = isOutdated ? "OUTDATED " : ""; logger.LogInfo().WithCategory(LogCategory.AirQuality) .WithMessage($"{outdatedText}{measurement} is {result.Pollution} ({value?.Value} with index {result.Index:0.00}) on {value?.LastDate}") .Commit(); return(result); }
public CalculatedPollution CalculatePollution(DateTime measurementDate, Measurement measurement, double?value, double?index) { CalculatedPollution result = new CalculatedPollution { Measurement = measurement, Index = value ?? 0 }; bool isOutdated = false; if (!value.HasValue || (isOutdated = (DateTime.Now - measurementDate).TotalHours > 4)) { result.Pollution = AirPollution.Low; result.Index = 0; } else { if (index.Value < 50) { result.Pollution = AirPollution.Low; } else if (index < 75) { result.Pollution = AirPollution.Mid; } else if (index < 100) { result.Pollution = AirPollution.High; } else { result.Pollution = AirPollution.VeryHigh; } result.Index = index.Value; } string outdatedText = isOutdated ? "OUTDATED " : ""; logger.LogInformation($"{outdatedText}{measurement} is {result.Pollution} ({value} with index {result.Index:0.00}) on {measurementDate}"); return(result); }