package ru.yandex.market.graphouse.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import ru.yandex.market.graphouse.MetricValidator; import ru.yandex.market.graphouse.cacher.MetricCacher; import ru.yandex.market.graphouse.data.MetricDataService; import ru.yandex.market.graphouse.monitoring.Monitoring; import ru.yandex.market.graphouse.retention.ClickHouseRetentionProvider; import ru.yandex.market.graphouse.retention.DefaultRetentionProvider; import ru.yandex.market.graphouse.retention.RetentionProvider; import ru.yandex.market.graphouse.search.MetricSearch; import ru.yandex.market.graphouse.server.MetricFactory; /** * @author Vlad Vinogradov <a href="mailto:vladvin@yandex-team.ru"></a> * @date 10.11.16 */ @Configuration public class MetricsConfig { @Autowired private Monitoring monitoring; @Autowired private JdbcTemplate clickHouseJdbcTemplate; @Value("${graphouse.clickhouse.data-table}") private String graphiteDataTable; @Value("${graphouse.clickhouse.retention-config}") private String retentionConfig; @Value("${graphouse.metric-validation.min-length}") private int minMetricLength; @Value("${graphouse.metric-validation.max-length}") private int maxMetricLength; @Value("${graphouse.metric-validation.min-levels}") private int minDots; @Value("${graphouse.metric-validation.max-levels}") private int maxDots; @Value("${graphouse.metric-validation.regexp}") private String metricRegexp; @Bean public MetricSearch metricSearch() { return new MetricSearch(clickHouseJdbcTemplate, monitoring, metricValidator(), retentionProvider()); } @Bean public RetentionProvider retentionProvider() { if (retentionConfig.isEmpty()) { return new DefaultRetentionProvider(); } else { return new ClickHouseRetentionProvider(clickHouseJdbcTemplate, retentionConfig); } } @Bean public MetricDataService metricDataService() { return new MetricDataService(metricSearch(), clickHouseJdbcTemplate, graphiteDataTable); } @Bean public MetricValidator metricValidator() { return new MetricValidator(metricRegexp, minMetricLength, maxMetricLength, minDots, maxDots); } @Bean public MetricCacher metricCacher() { return new MetricCacher(clickHouseJdbcTemplate, monitoring); } @Bean public MetricFactory metricFactory() { return new MetricFactory(metricSearch(), metricValidator()); } }