From 4ff83468b4dce4bbd35b8c8575da00652556c151 Mon Sep 17 00:00:00 2001 From: Nils Ove Tendenes Date: Wed, 9 Oct 2024 13:47:45 +0200 Subject: [PATCH] chore: cache default requests --- .../no/digdir/fdk/statistics/Scheduler.kt | 3 +- .../statistics/service/StatisticsService.kt | 86 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/no/digdir/fdk/statistics/Scheduler.kt b/src/main/kotlin/no/digdir/fdk/statistics/Scheduler.kt index b7b22ba..649e522 100644 --- a/src/main/kotlin/no/digdir/fdk/statistics/Scheduler.kt +++ b/src/main/kotlin/no/digdir/fdk/statistics/Scheduler.kt @@ -30,8 +30,9 @@ open class Scheduler(private val statisticsService: StatisticsService) { ) ) - log.info("Calculation done, clearing time-series cache") + log.info("Calculation done, clearing time-series cache and init with default requests") statisticsService.clearTimeSeriesCache() + statisticsService.cacheDefaultRequests() } } diff --git a/src/main/kotlin/no/digdir/fdk/statistics/service/StatisticsService.kt b/src/main/kotlin/no/digdir/fdk/statistics/service/StatisticsService.kt index 225d1ac..2bbc54d 100644 --- a/src/main/kotlin/no/digdir/fdk/statistics/service/StatisticsService.kt +++ b/src/main/kotlin/no/digdir/fdk/statistics/service/StatisticsService.kt @@ -7,16 +7,22 @@ import no.digdir.fdk.statistics.model.Event import no.digdir.fdk.statistics.model.InformationModel import no.digdir.fdk.statistics.model.LatestForDate import no.digdir.fdk.statistics.model.CalculationRequest +import no.digdir.fdk.statistics.model.Interval import no.digdir.fdk.statistics.model.ResourceType import no.digdir.fdk.statistics.model.Service import no.digdir.fdk.statistics.model.ResourceEventMetrics +import no.digdir.fdk.statistics.model.SearchFilter +import no.digdir.fdk.statistics.model.TimeSeriesFilters import no.digdir.fdk.statistics.model.TimeSeriesPoint import no.digdir.fdk.statistics.model.TimeSeriesRequest import no.digdir.fdk.statistics.repository.StatisticsRepository import org.slf4j.Logger import org.slf4j.LoggerFactory +import org.springframework.boot.context.event.ApplicationReadyEvent +import org.springframework.context.event.EventListener import org.springframework.stereotype.Component import java.time.LocalDate +import java.time.LocalDateTime import java.time.ZoneOffset @Component @@ -153,4 +159,84 @@ class StatisticsService(private val statisticsRepository: StatisticsRepository) return statisticsRepository.timeSeries(req) } + /** + * Run on startup + */ + @EventListener + private fun initCache(event: ApplicationReadyEvent) = + cacheDefaultRequests() + + fun cacheDefaultRequests() { + logger.info("Cache default requests") + + val firstOfThisMonth = LocalDate.now().withDayOfMonth(1).toString() + val conceptStart = "2023-02-01" + val dataServiceStart = "2023-02-01" + val datasetStart = "2022-11-01" + val infoModelStart = "2024-01-01" + + val conceptReq = TimeSeriesRequest( + start = conceptStart, + end = firstOfThisMonth, + interval = Interval.MONTH, + filters = TimeSeriesFilters( + resourceType = SearchFilter(value = ResourceType.CONCEPT), + orgPath = null, + transport = null + ) + ) + + statisticsRepository.timeSeries(conceptReq) + statisticsRepository.timeSeries(conceptReq.addTransportFilter()) + + val dataServiceReq = TimeSeriesRequest( + start = dataServiceStart, + end = firstOfThisMonth, + interval = Interval.MONTH, + filters = TimeSeriesFilters( + resourceType = SearchFilter(value = ResourceType.DATA_SERVICE), + orgPath = null, + transport = null + ) + ) + + statisticsRepository.timeSeries(dataServiceReq) + statisticsRepository.timeSeries(dataServiceReq.addTransportFilter()) + + val datasetReq = TimeSeriesRequest( + start = datasetStart, + end = firstOfThisMonth, + interval = Interval.MONTH, + filters = TimeSeriesFilters( + resourceType = SearchFilter(value = ResourceType.DATASET), + orgPath = null, + transport = null + ) + ) + + statisticsRepository.timeSeries(datasetReq) + statisticsRepository.timeSeries(datasetReq.addTransportFilter()) + + val infoModelReq = TimeSeriesRequest( + start = infoModelStart, + end = firstOfThisMonth, + interval = Interval.MONTH, + filters = TimeSeriesFilters( + resourceType = SearchFilter(value = ResourceType.INFORMATION_MODEL), + orgPath = null, + transport = null + ) + ) + + statisticsRepository.timeSeries(infoModelReq) + statisticsRepository.timeSeries(infoModelReq.addTransportFilter()) + } + + private fun TimeSeriesRequest.addTransportFilter() = + copy( + filters = filters?.copy( + transport = SearchFilter(value = true) + ) + ) + }