package ru.yandex.market.graphouse.retention; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author Dmitry Andreev <a href="mailto:AndreevDm@yandex-team.ru"></a> * @date 03/04/2017 */ public class DefaultRetentionProvider extends AbstractRetentionProvider { private final static Logger log = LogManager.getLogger(); private final static int DAY = (int) TimeUnit.DAYS.toSeconds(1); private final static int MONTH = (int) TimeUnit.DAYS.toSeconds(30); //2592000 private final static int YEAR = 12 * MONTH; //31104000 private final static List<MetricRetention> RETENTIONS = getDefault(); public DefaultRetentionProvider() { super(RETENTIONS); } private static List<MetricRetention> getDefault() { List<MetricRetention> retentions = new ArrayList<>(); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^one_sec.*", "avg") .addRetention(0, 1) .addRetention(DAY, 5) .addRetention(7 * DAY, 60) .addRetention(3 * MONTH, 300) .addRetention(YEAR, 600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^five_sec.*", "avg") .addRetention(0, 5) .addRetention(7 * DAY, 60) .addRetention(3 * MONTH, 300) .addRetention(YEAR, 600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^one_min.*", "avg") .addRetention(0, 60) .addRetention(3 * MONTH, 300) .addRetention(YEAR, 600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^five_min.*", "avg") .addRetention(0, 300) .addRetention(YEAR, 600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^ten_min.*", "avg") .addRetention(0, 600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^half_hour.*", "avg") .addRetention(0, 1_800) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^one_hour.*", "avg") .addRetention(0, 3_600) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder("^one_day.*", "avg") .addRetention(0, 86_400) .build() ); retentions.add( new MetricRetention.MetricDataRetentionBuilder(".*", "avg") .addRetention(0, 60) .addRetention(MONTH, 300) .addRetention(YEAR, 600) .build() ); return Collections.unmodifiableList(retentions); } }