コード例 #1
0
        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);
        }
コード例 #2
0
        private async Task <GaugeValue> RecordValue(
            DataValue value,
            RiverFlowSnapshotModel snapshot,
            GaugeReport report)
        {
            await this.EnsureVariable(value);

            return(await this.AddGaugeValue(value, snapshot, report));
        }
コード例 #3
0
        public async Task AddGaugeReport(RiverFlowSnapshotModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            await this.flowRecordingService.Record(model);
        }
コード例 #4
0
        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();
        }