try {
String responseContent = sendRequest(request, properties);
ElspotpriceRecords records = gson.fromJson(responseContent, ElspotpriceRecords.class);
- if (records == null) {
+ if (records == null || Objects.isNull(records.records())) {
throw new DataServiceException("Error parsing response");
}
- if (records.total() == 0 || Objects.isNull(records.records()) || records.records().length == 0) {
- throw new DataServiceException("No records");
- }
-
return Arrays.stream(records.records()).filter(Objects::nonNull).toArray(ElspotpriceRecord[]::new);
} catch (JsonSyntaxException e) {
throw new DataServiceException("Error parsing response", e);
updateTimeSeries();
if (isLinked(CHANNEL_SPOT_PRICE)) {
- if (cacheManager.getNumberOfFutureSpotPrices() < 13) {
- logger.warn("Spot prices are not yet available, retry scheduled (see details in Thing properties)");
- retryPolicy = RetryPolicyFactory.whenExpectedSpotPriceDataMissing(DAILY_REFRESH_TIME_CET,
- NORD_POOL_TIMEZONE);
- } else {
+ long numberOfFutureSpotPrices = cacheManager.getNumberOfFutureSpotPrices();
+ LocalTime now = LocalTime.now(NORD_POOL_TIMEZONE);
+
+ if (numberOfFutureSpotPrices >= 13 || (numberOfFutureSpotPrices == 12
+ && now.isAfter(DAILY_REFRESH_TIME_CET.minusHours(1)) && now.isBefore(DAILY_REFRESH_TIME_CET))) {
retryPolicy = RetryPolicyFactory.atFixedTime(DAILY_REFRESH_TIME_CET, NORD_POOL_TIMEZONE);
+ } else {
+ logger.warn("Spot prices are not available, retry scheduled (see details in Thing properties)");
+ retryPolicy = RetryPolicyFactory.whenExpectedSpotPriceDataMissing();
}
} else {
retryPolicy = RetryPolicyFactory.atFixedTime(LocalTime.MIDNIGHT, timeZoneProvider.getTimeZone());
Duration.ofHours(-CacheManager.NUMBER_OF_HISTORIC_HOURS));
}
Map<String, String> properties = editProperties();
- ElspotpriceRecord[] spotPriceRecords = apiController.getSpotPrices(config.priceArea, config.getCurrency(),
- start, properties);
- cacheManager.putSpotPrices(spotPriceRecords, config.getCurrency());
- updateProperties(properties);
+ try {
+ ElspotpriceRecord[] spotPriceRecords = apiController.getSpotPrices(config.priceArea, config.getCurrency(),
+ start, properties);
+ cacheManager.putSpotPrices(spotPriceRecords, config.getCurrency());
+ } finally {
+ updateProperties(properties);
+ }
}
private void downloadTariffs(DatahubTariff datahubTariff) throws InterruptedException, DataServiceException {
private Collection<DatahubPricelistRecord> downloadPriceLists(GlobalLocationNumber globalLocationNumber,
DatahubTariffFilter filter) throws InterruptedException, DataServiceException {
Map<String, String> properties = editProperties();
- Collection<DatahubPricelistRecord> records = apiController.getDatahubPriceLists(globalLocationNumber,
- ChargeType.Tariff, filter, properties);
- updateProperties(properties);
-
- return records;
+ try {
+ return apiController.getDatahubPriceLists(globalLocationNumber, ChargeType.Tariff, filter, properties);
+ } finally {
+ updateProperties(properties);
+ }
}
private DatahubTariffFilter getGridTariffFilter() {
/**
* Determine {@link RetryStrategy} when expected spot price data is missing.
*
- * @param localTime the time of daily data request
- * @param zoneId time-zone
* @return retry strategy
*/
- public static RetryStrategy whenExpectedSpotPriceDataMissing(LocalTime localTime, ZoneId zoneId) {
- LocalTime now = LocalTime.now(zoneId);
- if (now.isAfter(localTime)) {
- return new ExponentialBackoff().withMinimum(Duration.ofMinutes(10)).withJitter(0.2);
- }
- return atFixedTime(localTime, zoneId);
+ public static RetryStrategy whenExpectedSpotPriceDataMissing() {
+ return new ExponentialBackoff().withMinimum(Duration.ofMinutes(10)).withMaximum(Duration.ofHours(1))
+ .withJitter(0.2);
}
}