@Override public Filters filters(Date from, Date to) { return new Filters(); } }
@Override public StatDetails loadDetails(String detailsId, List<String> statsIds){ StatDetails result = new StatDetails(detailsId, null); processStats(statsIds, stats -> { Stat stat = getDetailsOrEmpty(detailsId, stats); result.add(stat); }); return result; }
@Override public void setup(String dirName) { defaultStorage = new GzipStorage(); defaultStorage.setup(dirName); dailyStorage = new GzipStorage(); dailyStorage.setup(dirName + "/day"); weeklyStorage = new GzipStorage(); weeklyStorage.setup(dirName + "/week"); monthlyStorage = new GzipStorage(); monthlyStorage.setup(dirName + "/month"); } }
@Transient public void add(Stat details, Date startDate, Date endDate){ if( details == null ){ return; } if( getMerged() == null ){ setMerged(details.deepCopy(true)); } else { getMerged().merge(details, true); } getHistogram().add( new StatHistory(details, startDate, endDate) ); } }
@Override public Histogram loadHistogram(String detailsId, Date from, Date to, String instance, String type, String lastGroupId){ List<String> statsIds = find(from, to, instance, type); Histogram result = new Histogram(detailsId); processStats(statsIds, stats -> { Stat stat = getDetailsOrEmpty(detailsId, stats); result.add(stat, stats.getStartDate(),stats.getEndDate()); }); return result; }
@Test public void should_find_filters_for_type() throws IOException{ storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i2", "t1"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i1", "t2"); storage.save(stats(dt(year+"-01-01 08:00:00"), dt(year+"-01-01 08:15:00")), "i3", "t2"); Filters filters = storage.findFilters(dt(year+"-01-01 07:10:00"), dt(year+"-01-01 08:40:00"), "t1"); assertEquals( 2, filters.getInstances().size() ); assertTrue(filters.getInstances().contains("i1")); assertTrue(filters.getInstances().contains("i2")); assertEquals( 1, filters.getTypes().size() ); assertTrue(filters.getTypes().contains("t1")); }
@Transient public void add(Stat details, Date startDate, Date endDate){ if( details == null ){ return; } getHistogram().add( new StatHistory(details, startDate, endDate) ); }
@Test public void shouldLoadDailyDetailsFromDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-10-02 01:58:00"); //when storage.loadDetails("detailsId", from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verify(dailyStorage).loadDetails(eq("detailsId"), eq(from), eq(to), isNull(String.class), eq("type")); verifyNoMoreInteractions(weeklyStorage); verifyNoMoreInteractions(monthlyStorage); }
@Test public void shouldLoadWeeklyHistogramFromDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-10-08 01:58:00"); //when storage.loadHistogram("detailsId", from, to, "instance", "type", null); //then verifyNoMoreInteractions(defaultStorage); verify(dailyStorage).loadHistogram(eq("detailsId"), eq(from), eq(to), isNull(String.class), eq("type"), isNull(String.class)); verifyNoMoreInteractions(weeklyStorage); verifyNoMoreInteractions(monthlyStorage); }
public Engine(){ if( isEnabled()) { statsStorage = new StatsStorageFactory().safeCreate();//may return null statsCyclicWriter = new StatsCyclicWriter(statsStorage); statsProcessor = new StatsProcessor(statsCyclicWriter); } }
@Test public void shouldFindStatsInMonthlyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-11-18 01:00:00"); //when storage.find(from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verifyNoMoreInteractions(dailyStorage); verifyNoMoreInteractions(weeklyStorage); verify(monthlyStorage).find(eq(from), eq(to), isNull(String.class), eq("type")); }
private void safeSaveIfNeeded(){ if( statsCyclicWriter.shouldSave() ){ synchronized(stats){ statsCyclicWriter.safeSave(stats); stats = createEmptyStats(); } } }
public void safeSave(Stats stats){ try{ if( statsStorage != null ){ ensureDatesAreSet(stats); long start = System.currentTimeMillis(); statsStorage.save(stats); lastSave = dateUtil.now(); lastError = null; log.info("Saved stats in {}ms", System.currentTimeMillis() - start); } }catch(Exception e){ log.error("failed to save stats - next attempt in 5 minutes", e); lastError = dateUtil.now(); } }
@Before public void setup(){ storage.setStorage(defaultStorage, dailyStorage, weeklyStorage, monthlyStorage); }
@Test public void shouldLoadWeeklyDetailsFromDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-10-08 01:58:00"); //when storage.loadDetails("detailsId", from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verifyNoMoreInteractions(dailyStorage); verify(weeklyStorage).loadDetails(eq("detailsId"), eq(from), eq(to), isNull(String.class), eq("type")); verifyNoMoreInteractions(monthlyStorage); }
@Test public void shouldLoadMonthlyHistogramFromDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-11-08 01:58:00"); //when storage.loadHistogram("detailsId", from, to, "instance", "type", null); //then verifyNoMoreInteractions(defaultStorage); verify(dailyStorage).loadHistogram(eq("detailsId"), eq(from), eq(to), isNull(String.class), eq("type"), isNull(String.class)); verifyNoMoreInteractions(weeklyStorage); verifyNoMoreInteractions(monthlyStorage); } }
@Test public void shouldFindStatsInDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-10-02 01:00:00"); //when storage.find(from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verify(dailyStorage).find(eq(from), eq(to), isNull(String.class), eq("type")); verifyNoMoreInteractions(weeklyStorage); verifyNoMoreInteractions(monthlyStorage); }
@Test public void shouldLoadMonthlyDetailsFromDailyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-11-08 01:58:00"); //when storage.loadDetails("detailsId", from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verifyNoMoreInteractions(dailyStorage); verifyNoMoreInteractions(weeklyStorage); verify(monthlyStorage).loadDetails(eq("detailsId"), eq(from), eq(to), isNull(String.class), eq("type")); }
@Test public void shouldFindStatsInWeeklyStorage(){ //given Date from = parse("2016-10-01 00:00:00"); Date to = parse("2016-10-08 01:00:00"); //when storage.find(from, to, "instance", "type"); //then verifyNoMoreInteractions(defaultStorage); verifyNoMoreInteractions(dailyStorage); verify(weeklyStorage).find(eq(from), eq(to), isNull(String.class), eq("type")); verifyNoMoreInteractions(monthlyStorage); }