private TimeSeriesUniqueIdListServiceRequest CreateFilterRequest() { var locationIdentifier = Context.Config.LocationIdentifier; if (!string.IsNullOrEmpty(locationIdentifier)) { var locationDescription = Aquarius.Publish .Get(new LocationDescriptionListServiceRequest { LocationIdentifier = locationIdentifier }) .LocationDescriptions .SingleOrDefault(); if (locationDescription == null) { throw new ExpectedException($"Location '{locationIdentifier}' does not exist."); } locationIdentifier = locationDescription.Identifier; } return(new TimeSeriesUniqueIdListServiceRequest { ChangesSinceToken = SyncStatus.GetLastChangesSinceToken(), LocationIdentifier = locationIdentifier, ChangeEventType = Context.Config.ChangeEventType?.ToString(), Publish = Context.Config.Publish, Parameter = Context.Config.Parameter, ComputationIdentifier = Context.Config.ComputationIdentifier, ComputationPeriodIdentifier = Context.Config.ComputationPeriodIdentifier, ExtendedFilters = Context.Config.ExtendedFilters.Any() ? Context.Config.ExtendedFilters : null, }); }
private void RunOnce() { SyncStatus = new SyncStatus(Aquarius) { Context = Context }; TimeSeriesPointFilter = new TimeSeriesPointFilter { Context = Context }; ValidateFilters(); MaximumExportDuration = Context.MaximumPollDuration ?? SyncStatus.GetMaximumChangeEventDuration() .Subtract(TimeSpan.FromHours(1)); var request = CreateFilterRequest(); if (Context.ForceResync) { Log.Warn("Forcing a full time-series resync."); request.ChangesSinceToken = null; } else if (Context.ChangesSince.HasValue) { Log.Warn($"Overriding current ChangesSinceToken='{request.ChangesSinceToken:O}' with '{Context.ChangesSince:O}'"); request.ChangesSinceToken = Context.ChangesSince.Value.UtcDateTime; } Log.Info($"Checking {GetFilterSummary(request)} ..."); var stopwatch = Stopwatch.StartNew(); var response = Aquarius.Publish.Get(request); if (response.TokenExpired ?? false) { if (Context.NeverResync) { Log.Warn("Skipping a recommended resync."); } else { Log.Warn($"The ChangesSinceToken of {request.ChangesSinceToken:O} has expired. Forcing a full resync. You may need to run the exporter more frequently."); request.ChangesSinceToken = null; response = Aquarius.Publish.Get(request); } } var bootstrapToken = response.ResponseTime .Subtract(stopwatch.Elapsed) .Subtract(TimeSpan.FromMinutes(1)) .UtcDateTime; var nextChangesSinceToken = response.NextToken ?? bootstrapToken; var timeSeriesDescriptions = FetchChangedTimeSeriesDescriptions(response); Log.Info($"Connecting to {Context.Config.SosServer} as {Context.Config.SosUsername} ..."); var clearExportedData = !request.ChangesSinceToken.HasValue; request.ChangesSinceToken = nextChangesSinceToken; ExportToSos(request, response, timeSeriesDescriptions, clearExportedData); RemoveDeletedTimeSeries(response); SyncStatus.SaveConfiguration(request.ChangesSinceToken.Value); }