/** * Queries a specific dimension. This only queries against a {@link DataSource} if it's table contains the given * {@link Dimension}. * * @param dimension The dimension to load values for. */ default void queryDimension(Dimension dimension) { getDataSources().stream() .filter(dataSource -> dimensionExistsInDataSource(dimension, dataSource)) .forEach(dataSource -> query(dimension, dataSource)); }
/** * Start loading all dimensions. */ default void load() { getDimensions().stream() .peek(dimension -> LOG.trace("Querying values for dimension: {}", dimension)) .forEach(this::queryDimension); }
/** * DimensionLoaderTask tells all of the {@link DimensionValueLoader}s to update and add values to the dimension * cache. * * @param dimensionRowProviders A Collection of {@link DimensionValueLoader} to initialize dimensions. */ public DimensionValueLoadTask(Collection<DimensionValueLoader> dimensionRowProviders) { super( DimensionValueLoadTask.class.getSimpleName(), SYSTEM_CONFIG.getLongProperty(LOADER_TIMER_DELAY, 0), SYSTEM_CONFIG.getLongProperty( LOADER_TIMER_DURATION, TimeUnit.MINUTES.toMillis(1) ) ); this.dimensionRowProviders = dimensionRowProviders; lastRunTimestamp = new AtomicReference<>(); HttpErrorCallback errorCallback = getErrorCallback(); FailureCallback failureCallback = getFailureCallback(); dimensionRowProviders.forEach(dimensionRowProvider -> { dimensionRowProvider.setErrorCallback(errorCallback); dimensionRowProvider.setFailureCallback(failureCallback); }); }