private async Task <GaugeValue> AddGaugeValue( DataValue value, RiverFlowSnapshotModel snapshot, GaugeReport report) { var exists = await this.riverDbContext .GaugeValue .AnyAsync(gv => gv.AsOf == value.AsOf && gv.UsgsGaugeId == snapshot.Site.UsgsGaugeId && gv.Code == value.Code); if (!exists) { var gaugeValue = new GaugeValue { AsOf = DateConversion.ForStorage(value.AsOf), Code = value.Code, Report = report, UsgsGaugeId = snapshot.Site.UsgsGaugeId, Value = value.Value }; await this.riverDbContext.GaugeValue.AddAsync(gaugeValue); return(gaugeValue); } return(null); }
private async Task <GaugeValue> RecordValue( DataValue value, RiverFlowSnapshotModel snapshot, GaugeReport report) { await this.EnsureVariable(value); return(await this.AddGaugeValue(value, snapshot, report)); }
public async Task AddGaugeReport(RiverFlowSnapshotModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } await this.flowRecordingService.Record(model); }
public async Task Record(RiverFlowSnapshotModel snapshot) { string usgsGaugeId = snapshot.Site.UsgsGaugeId; var gauge = await this.EnsureGauge(snapshot.Site); if (gauge == null) { return; } await InactivateExistingGaugeReport(usgsGaugeId); var gaugeReport = new GaugeReport { AsOfUTC = DateTime.UtcNow, InstanceId = this.appInstanceId, Latest = true, Gauge = gauge }; var gaugeValuesSameDate = snapshot .Values .Select(v => v.AsOf) .Distinct() .Count() == snapshot.Values.Count; if (gaugeValuesSameDate) { gaugeReport.AsOf = DateConversion.ForStorage(snapshot.Values.First().AsOf); } else { gaugeReport.AsOf = DateConversion.ForStorage(snapshot.Values.Max(v => v.AsOf)); this.logger.LogInformation( "{gauge}: Different as of dates for variables in same report (unexpected), using latest: {date}", usgsGaugeId, gaugeReport.AsOf); } foreach (var dataValue in snapshot.Values) { var gaugeValue = await this.RecordValue(dataValue, snapshot, gaugeReport); if (gaugeValue != null) { gaugeReport.GaugeValueCount++; } } await this.riverDbContext.SaveChangesAsync(); }