private TimeSeriesInfo GetTimeSeriesInfo(TimeSeriesDescription timeSeriesDescription, long siteVisitLocationId) { return(_processor.Get(new GetTimeSeriesForLocationRequest { LocationId = siteVisitLocationId }) .Single(ts => ts.UniqueId == timeSeriesDescription.UniqueId)); }
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()); }
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}."); }
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}"); }
private List <TimeSeriesDescription> GetTimeSeriesDerivedFromTimeSeries(TimeSeriesDescription timeSeries) { return(GetDerivedTimeSeries(Client.Publish.Get(new DownchainProcessorListByTimeSeriesServiceRequest { TimeSeriesUniqueId = timeSeries.UniqueId }) .Processors)); }
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); }
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 }); }
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); } }
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()); }
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); }
private TimeSeriesInfo GetTimeSeriesInfo(TimeSeriesDescription timeSeriesDescription) { var siteVisitLocation = GetSiteVisitLocation(timeSeriesDescription); return(GetTimeSeriesInfo(timeSeriesDescription, siteVisitLocation.Id)); }
private SearchLocation GetSiteVisitLocation(TimeSeriesDescription timeSeriesDescription) { var locationInfo = ResolveLocationInfoNg(timeSeriesDescription.LocationIdentifier).Single(); return(GetSiteVisitLocation(locationInfo)); }
public void InitReport(RunFileReportRequest request) { _RunReportRequest = request; _TimeSeriesDescription = GetInputTimeSeriesDescription(); _SensorType = MapSensorType(); }
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); } }
public SensorInfo FindExistingSensor(TimeSeriesDescription timeSeriesDescription) { var procedureUniqueIdWithoutInterpolationType = CreateProcedureUniqueIdWithoutInterpolationType(timeSeriesDescription); return(FindExistingSensorWithPrefix(procedureUniqueIdWithoutInterpolationType)); }
public static DateTimeOffset?Parse(TimeSeriesDescription timeSeriesDescription, string timeText) { return(Parse(timeText, () => timeSeriesDescription.UtcOffsetIsoDuration.ToTimeSpan())); }
internal TimeSeriesBuilder(TimeSeriesDescription timeSeriesDescription) { TimeSeriesDescription = timeSeriesDescription; }
public List <TimeSeriesPoint> GetObservations(TimeSeriesDescription timeSeriesDescription, DateTimeOffset startTime, DateTimeOffset endTime) { return(GetObservationsFunc(timeSeriesDescription, startTime, endTime)); }