Example #1
0
 private TimeSeriesInfo GetTimeSeriesInfo(TimeSeriesDescription timeSeriesDescription, long siteVisitLocationId)
 {
     return(_processor.Get(new GetTimeSeriesForLocationRequest {
         LocationId = siteVisitLocationId
     })
            .Single(ts => ts.UniqueId == timeSeriesDescription.UniqueId));
 }
Example #2
0
        private List <TimeSeriesPoint> GetObservations44(TimeSeriesDescription timeSeriesDescription, DateTimeOffset startTime, DateTimeOffset endTime)
        {
            var request = new GetObservationRequest44
            {
                ObservedProperty =
                    CreateObservedPropertyName(timeSeriesDescription.Parameter, timeSeriesDescription.Label),
                FeatureOfInterest = CreateFeatureOfInterestId(timeSeriesDescription.LocationIdentifier),
                TemporalFilter    = CreateTemporalFilter(startTime, endTime)
            };

            var response = JsonClient.Get(request);

            ThrowIfSosException(response);

            if (response?.Observations == null)
            {
                return(new List <TimeSeriesPoint>());
            }

            return(response
                   .Observations
                   .Select(o => new TimeSeriesPoint
            {
                Timestamp = new StatisticalDateTimeOffset
                {
                    DateTimeOffset = o.PhenomenonTime
                },
                Value = new DoubleWithDisplay
                {
                    Numeric = o.Result?.Value
                }
            })
                   .ToList());
        }
Example #3
0
        private string GetTimeSeriesSummary(TimeSeriesDescription timeSeries)
        {
            var timeSeriesData = Client.Publish.Get(new TimeSeriesDataCorrectedServiceRequest
            {
                TimeSeriesUniqueId = timeSeries.UniqueId
            });

            var pointsSummary = timeSeriesData.Points.Any()
                ? $"{"point".ToQuantity(timeSeriesData.Points.Count)} from {timeSeriesData.Points.First().Timestamp.DateTimeOffset} to {timeSeriesData.Points.Last().Timestamp.DateTimeOffset}"
                : "no points";

            var derivedTimeSeries = GetTimeSeriesDerivedFromTimeSeries(timeSeries);

            var timeSeriesSummary = FriendlyListExcludingZeroCounts(
                pointsSummary,
                "threshold".ToQuantity(timeSeries.Thresholds.Count),
                "grade".ToQuantity(timeSeriesData.Grades.Count),
                "qualifier".ToQuantity(timeSeriesData.Qualifiers.Count),
                "note".ToQuantity(timeSeriesData.Notes.Count),
                "approval".ToQuantity(timeSeriesData.Approvals.Count),
                "derived dependency".ToQuantity(derivedTimeSeries.Count));

            if (derivedTimeSeries.Any())
            {
                timeSeriesSummary += $": '{string.Join("', '", derivedTimeSeries.Select(ts => ts.Identifier))}'";
            }

            return($"Time-series '{timeSeries.Identifier}' ({timeSeries.TimeSeriesType}) has {timeSeriesSummary}.");
        }
Example #4
0
        private string GetTimeSeriesSummary(TimeSeriesDescription timeSeries)
        {
            var timeSeriesData = Client.Publish.Get(new TimeSeriesDataCorrectedServiceRequest
            {
                TimeSeriesUniqueId = timeSeries.UniqueId
            });

            var pointsSummary = timeSeriesData.Points.Any()
                ? $"{"point".ToQuantity(timeSeriesData.Points.Count)} from {timeSeriesData.Points.First().Timestamp.DateTimeOffset} to {timeSeriesData.Points.Last().Timestamp.DateTimeOffset}"
                : "no points";

            var downchainDependencies = Client.Publish.Get(new DownchainProcessorListByTimeSeriesServiceRequest
            {
                TimeSeriesUniqueId = timeSeries.UniqueId
            }).Processors;

            var timeSeriesSummary = FriendlyListExcludingZeroCounts(
                pointsSummary,
                "threshold".ToQuantity(timeSeries.Thresholds.Count),
                "grade".ToQuantity(timeSeriesData.Grades.Count),
                "qualifier".ToQuantity(timeSeriesData.Qualifiers.Count),
                "note".ToQuantity(timeSeriesData.Notes.Count),
                "approval".ToQuantity(timeSeriesData.Approvals.Count),
                "derived dependency".ToQuantity(downchainDependencies.Count));

            return($"Time-series '{timeSeries.Identifier}' ({timeSeries.TimeSeriesType}) has {timeSeriesSummary}");
        }
Example #5
0
 private List <TimeSeriesDescription> GetTimeSeriesDerivedFromTimeSeries(TimeSeriesDescription timeSeries)
 {
     return(GetDerivedTimeSeries(Client.Publish.Get(new DownchainProcessorListByTimeSeriesServiceRequest
     {
         TimeSeriesUniqueId = timeSeries.UniqueId
     })
                                 .Processors));
 }
Example #6
0
 private static string CreateProcedureUniqueIdWithoutInterpolationType(TimeSeriesDescription timeSeriesDescription)
 {
     return(SanitizeIdentifier(
                ComposeProcedureUniqueId(
                    timeSeriesDescription.Parameter,
                    timeSeriesDescription.Label,
                    timeSeriesDescription.LocationIdentifier)));
 }
 internal TimeSeries(TimeSeriesDescription descript, AquariusClient client)
 {
     this.client     = client;
     Id              = descript.AqDataID;
     Type            = descript.Aqtimeseriestype;
     LastRecord      = descript.EndTime;
     Units           = descript.Units;
     NumberOfSamples = descript.TotalSamples;
     Identifier      = descript.Identifier;
     LastModified    = descript.LastModified;
     Name            = descript.Label;
     ValueType       = descript.ParameterType;
     ValueName       = descript.ParameterName;
     Builder         = new TimeSeriesBuilder(descript);
 }
Example #8
0
        private void DeleteTimeSeries(TimeSeriesDescription timeSeriesDescription)
        {
            if (timeSeriesDescription.TimeSeriesType == "Reflected")
            {
                Client.Provisioning.Delete(new DeleteTimeSeries {
                    TimeSeriesUniqueId = timeSeriesDescription.UniqueId
                });
                return;
            }

            var timeSeriesInfo = GetTimeSeriesInfo(timeSeriesDescription);

            _processor.Delete(new DeleteTimeSeriesRequest {
                TimeSeriesId = timeSeriesInfo.TimeSeriesId
            });
        }
Example #9
0
        private bool UnlockTimeSeries(TimeSeriesDescription timeSeriesDescription)
        {
            if (Client.ServerVersion.IsLessThan(MinimumApprovalUnlockVersion))
            {
                return(false);
            }

            var siteVisitLocation = GetSiteVisitLocation(timeSeriesDescription);

            var lowestApprovalLevel = GetLowestApprovalLevel(siteVisitLocation.Id);

            var timeSeriesInfo = GetTimeSeriesInfo(timeSeriesDescription);

            Log.Info($"Unlocking '{timeSeriesDescription.Identifier}' to ApprovalLevel={lowestApprovalLevel.Level} ({lowestApprovalLevel.Name})");

            var approvalJob = _siteVisit.RequestAndPollUntilComplete(
                siteVisit => siteVisit.Post(new PostDatasetApproval
            {
                Id = timeSeriesInfo.TimeSeriesId,
                IsMigrationRequest = true,
                ApprovalLevelId    = lowestApprovalLevel.Id
            }),
                (siteVisit, response) => siteVisit.Get(new GetApprovalJob {
                Id = response.Id
            }),
                polledStatus => polledStatus.Complete);

            if (!approvalJob.Success)
            {
                Log.Warn($"Can't unlock approvals for '{timeSeriesDescription.Identifier}': {string.Join(", ", approvalJob.RelatedDatasets.SelectMany(dataset => dataset.ApprovalRejectionReasons))}");
                return(false);
            }

            try
            {
                DeleteTimeSeries(timeSeriesDescription);
                Log.Info($"Deleted '{timeSeriesDescription.Identifier}' successfully.");

                return(true);
            }
            catch (WebServiceException)
            {
                return(false);
            }
        }
Example #10
0
        private List <TimeSeriesPoint> GetObservations40(TimeSeriesDescription timeSeriesDescription, DateTimeOffset startTime, DateTimeOffset endTime)
        {
            var request = new GetObservationRequest40
            {
                ObservedProperty =
                    CreateObservedPropertyName(timeSeriesDescription.Parameter, timeSeriesDescription.Label),
                FeatureOfInterest = CreateFeatureOfInterestId(timeSeriesDescription.LocationIdentifier),
                TemporalFilter    = CreateTemporalFilter(startTime, endTime)
            };

            var response = JsonClient.Get(request);

            ThrowIfSosException(response);
            if (response == null)
            {
                return(new List <TimeSeriesPoint>());
            }

            var observation = response
                              .Observations
                              ?.FirstOrDefault();

            if (observation?.Result?.Values == null)
            {
                return(new List <TimeSeriesPoint>());
            }

            return(observation
                   .Result
                   .Values
                   .Select(p => new TimeSeriesPoint
            {
                Timestamp = new StatisticalDateTimeOffset
                {
                    DateTimeOffset = DateTimeOffset.Parse(p[0])
                },
                Value = new DoubleWithDisplay
                {
                    Numeric = double.Parse(p[1])
                }
            })
                   .ToList());
        }
Example #11
0
        private void DeleteTimeSeries(TimeSeriesDescription timeSeriesDescription)
        {
            if (timeSeriesDescription.TimeSeriesType == "Reflected")
            {
                Client.Provisioning.Delete(new DeleteTimeSeries {
                    TimeSeriesUniqueId = timeSeriesDescription.UniqueId
                });
                return;
            }

            var locationInfo      = ResolveLocationInfoNg(timeSeriesDescription.LocationIdentifier).Single();
            var siteVisitLocation = GetSiteVisitLocation(locationInfo);
            var timeSeries        = _processor.Get(new GetTimeSeriesForLocationRequest {
                LocationId = siteVisitLocation.Id
            })
                                    .Single(ts => ts.UniqueId == timeSeriesDescription.UniqueId);

            _processor.Delete(new DeleteTimeSeriesRequest {
                TimeSeriesId = timeSeries.TimeSeriesId
            });
        }
        public DataTable TimeSeriesDataTable(string tableName, Guid timeseriesUniqueId)
        {
            Log.DebugFormat("Create TimeSeriesDataTable {0}, {1}", tableName, timeseriesUniqueId);
            DataTable timeSeriesTable = new DataTable(tableName);

            timeSeriesTable.Columns.Add("UniqueId", typeof(Guid));
            timeSeriesTable.Columns.Add("TimeSeriesIdentifier", typeof(string));
            timeSeriesTable.Columns.Add("Parameter", typeof(string));
            timeSeriesTable.Columns.Add("Label", typeof(string));
            timeSeriesTable.Columns.Add("Description", typeof(string));
            timeSeriesTable.Columns.Add("Comment", typeof(string));
            timeSeriesTable.Columns.Add("LocationIdentifier", typeof(string));
            timeSeriesTable.Columns.Add("SubLocationIdentifier", typeof(string));
            timeSeriesTable.Columns.Add("Computation", typeof(string));
            timeSeriesTable.Columns.Add("ComputationPeriod", typeof(string));
            timeSeriesTable.Columns.Add("TimeSeriesType", typeof(string));
            timeSeriesTable.Columns.Add("InterpolationType", typeof(InterpolationType));
            timeSeriesTable.Columns.Add("InterpolationTypeString", typeof(string));
            timeSeriesTable.Columns.Add("LastModified", typeof(DateTimeOffset));
            timeSeriesTable.Columns.Add("RawStartTime", typeof(DateTimeOffset));
            timeSeriesTable.Columns.Add("RawEndTime", typeof(DateTimeOffset));
            timeSeriesTable.Columns.Add("Publish", typeof(bool));
            timeSeriesTable.Columns.Add("Unit", typeof(string));
            timeSeriesTable.Columns.Add("UnitSymbol", typeof(string));
            timeSeriesTable.Columns.Add("UnitInformation", typeof(string));
            timeSeriesTable.Columns.Add("UtcOffset", typeof(TimeSpan));
            timeSeriesTable.Columns.Add("UtcOffsetString", typeof(string));
            timeSeriesTable.Columns.Add("TimeSeriesInformation", typeof(string));
            timeSeriesTable.Columns.Add("TimeSeriesInterval", typeof(DateTimeOffsetInterval));
            timeSeriesTable.Columns.Add("TimeSeriesTimeRangeString", typeof(string));
            timeSeriesTable.Columns.Add("TimeSeriesTimeRangeInformation", typeof(string));
            timeSeriesTable.Columns.Add("RoundingSpec", typeof(string));
            DataRow dataRow = timeSeriesTable.NewRow();

            TimeSeriesDescription tsd = _Common.GetTimeSeriesDescription(timeseriesUniqueId);

            dataRow["UniqueId"]             = tsd.UniqueId;
            dataRow["TimeSeriesIdentifier"] = tsd.Identifier;
            dataRow["Parameter"]            = tsd.Parameter;
            dataRow["Label"]                   = tsd.Label;
            dataRow["Description"]             = tsd.Description;
            dataRow["Comment"]                 = tsd.Comment;
            dataRow["LocationIdentifier"]      = tsd.LocationIdentifier;
            dataRow["SubLocationIdentifier"]   = tsd.SubLocationIdentifier;
            dataRow["Computation"]             = tsd.ComputationIdentifier;
            dataRow["ComputationPeriod"]       = tsd.ComputationPeriodIdentifier;
            dataRow["TimeSeriesType"]          = tsd.TimeSeriesType;
            dataRow["InterpolationType"]       = _Common.GetTimeSeriesInterpolationType(timeseriesUniqueId);
            dataRow["InterpolationTypeString"] = GetLegacyInterpolationTypeString(_Common.GetTimeSeriesInterpolationType(timeseriesUniqueId));
            dataRow["LastModified"]            = tsd.LastModified;
            if (tsd.RawStartTime.HasValue)
            {
                dataRow["RawStartTime"] = tsd.RawStartTime.Value;
            }
            if (tsd.RawEndTime.HasValue)
            {
                dataRow["RawEndTime"] = tsd.RawEndTime.Value;
            }
            dataRow["Publish"]                        = tsd.Publish;
            dataRow["Unit"]                           = tsd.Unit;
            dataRow["UnitSymbol"]                     = _Common.GetTimeSeriesUnitSymbol(timeseriesUniqueId);
            dataRow["UnitInformation"]                = _Common.GetTimeSeriesUnitInformation(timeseriesUniqueId);
            dataRow["UtcOffset"]                      = TimeSpan.FromHours(tsd.UtcOffset);
            dataRow["UtcOffsetString"]                = _Common.GetOffsetString(tsd.UtcOffset);
            dataRow["TimeSeriesInformation"]          = _Common.GetTimeSeriesInformation(timeseriesUniqueId);
            dataRow["TimeSeriesInterval"]             = _Common.GetTimeSeriesTimeRange(timeseriesUniqueId);
            dataRow["TimeSeriesTimeRangeString"]      = _Common.GetTimeSeriesTimeRangeString(timeseriesUniqueId);
            dataRow["TimeSeriesTimeRangeInformation"] = _Common.GetTimeSeriesTimeRangeInformation(timeseriesUniqueId);
            dataRow["RoundingSpec"]                   = _Common.GetParameterRoundingSpec(tsd.Parameter);

            timeSeriesTable.Rows.Add(dataRow);

            return(timeSeriesTable);
        }
Example #13
0
        private TimeSeriesInfo GetTimeSeriesInfo(TimeSeriesDescription timeSeriesDescription)
        {
            var siteVisitLocation = GetSiteVisitLocation(timeSeriesDescription);

            return(GetTimeSeriesInfo(timeSeriesDescription, siteVisitLocation.Id));
        }
Example #14
0
        private SearchLocation GetSiteVisitLocation(TimeSeriesDescription timeSeriesDescription)
        {
            var locationInfo = ResolveLocationInfoNg(timeSeriesDescription.LocationIdentifier).Single();

            return(GetSiteVisitLocation(locationInfo));
        }
Example #15
0
 public void InitReport(RunFileReportRequest request)
 {
     _RunReportRequest      = request;
     _TimeSeriesDescription = GetInputTimeSeriesDescription();
     _SensorType            = MapSensorType();
 }
Example #16
0
        public void InsertObservation(string assignedOffering, LocationDataServiceResponse location, LocationDescription locationDescription, TimeSeriesDataServiceResponse timeSeries, TimeSeriesDescription timeSeriesDescription)
        {
            var xmlTemplatePath = IsSpatialLocationDefined(location)
                ? @"XmlTemplates\InsertObservation.xml"
                : @"XmlTemplates\InsertObservationWithNoGeoSpatial.xml";

            const string pointTokenSeparator = ";";
            const string pointBlockSeparator = "@";

            var observablePropertyFieldName = SanitizeIdentifier($" {timeSeries.Parameter}_{timeSeries.Label}".Replace(" ", "_")); // TODO: Figure this mapping out

            var substitutions = CreateSubstitutions(timeSeries)
                                .Concat(new Dictionary <string, string>
            {
                { "{__offeringUri__}", assignedOffering },
                { "{__featureOfInterestName__}", location.LocationName },
                { "{__featureOfInterestLatitude__}", $"{location.Latitude}" },
                { "{__featureOfInterestLongitude__}", $"{location.Longitude}" },
                { "{__observablePropertyUnit__}", SanitizeUnitSymbol(timeSeries.Unit) },
                { "{__observablePropertyFieldName__}", observablePropertyFieldName },
                { "{__resultTime__}", $"{FixedResultTime:O}" },
                { "{__pointTokenSeparator__}", pointTokenSeparator },
                { "{__pointBlockSeparator__}", pointBlockSeparator },
            })
                                .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            var procedureUniqueId = substitutions[ProcedureUniqueIdKey];

            var existingSensor = FindExistingSensor(procedureUniqueId);

            for (var insertedPoints = 0; insertedPoints < timeSeries.Points.Count;)
            {
                var points = timeSeries.Points
                             .Skip(insertedPoints)
                             .Take(MaximumPointsPerObservation)
                             .ToList();

                substitutions["{__phenomenonStartTime__}"] = $"{points.First().Timestamp.DateTimeOffset:O}";
                substitutions["{__phenomenonEndTime__}"]   = $"{points.Last().Timestamp.DateTimeOffset:O}";
                substitutions["{__pointCount__}"]          = $"{points.Count}";
                substitutions["{__pointValues__}"]         = string.Join(pointBlockSeparator, points.Select(p => $"{p.Timestamp.DateTimeOffset:O}{pointTokenSeparator}{p.Value.Display}"));

                existingSensor.PhenomenonTime = existingSensor.PhenomenonTime
                                                .Concat(new[] { points.Last().Timestamp.DateTimeOffset })
                                                .OrderBy(x => x)
                                                .ToList();

                insertedPoints += points.Count;

                var xml = TransformXmlTemplate(xmlTemplatePath, substitutions);

                Log.Info($"Posting {points.Count} data points to '{procedureUniqueId}' ...");
                PostPox(xml);
            }
        }
Example #17
0
        public SensorInfo FindExistingSensor(TimeSeriesDescription timeSeriesDescription)
        {
            var procedureUniqueIdWithoutInterpolationType = CreateProcedureUniqueIdWithoutInterpolationType(timeSeriesDescription);

            return(FindExistingSensorWithPrefix(procedureUniqueIdWithoutInterpolationType));
        }
Example #18
0
 public static DateTimeOffset?Parse(TimeSeriesDescription timeSeriesDescription, string timeText)
 {
     return(Parse(timeText, () => timeSeriesDescription.UtcOffsetIsoDuration.ToTimeSpan()));
 }
 internal TimeSeriesBuilder(TimeSeriesDescription timeSeriesDescription)
 {
     TimeSeriesDescription = timeSeriesDescription;
 }
Example #20
0
 public List <TimeSeriesPoint> GetObservations(TimeSeriesDescription timeSeriesDescription, DateTimeOffset startTime, DateTimeOffset endTime)
 {
     return(GetObservationsFunc(timeSeriesDescription, startTime, endTime));
 }