private void pulseCollectStats() { statsCollector = executorService.scheduleAtFixedRate(() -> { if(!nodeStats.collect(ledger,config)) { //config changed. stats aren't collected and being reset statsCollector.cancel(false); statsCollector = null; pulseCollectStats(); } },config.getStatsIntervalSmall().getSeconds(),config.getStatsIntervalSmall().getSeconds(),TimeUnit.SECONDS); }
public boolean collect(Ledger ledger, Config config) { if(!config.getStatsIntervalSmall().equals(smallInterval) || !config.getStatsIntervalBig().equals(bigInterval)) { //intervals changed. need to reset node init(ledger,config); return false; } ZonedDateTime now = ZonedDateTime.now(); Map<ItemState, Integer> lastIntervalStats = ledger.getLedgerSize(lastStatsBuildTime); ledgerStatsHistory.addLast(lastIntervalStats); ledgerHistoryTimestamps.addLast(lastStatsBuildTime); smallIntervalApproved = lastIntervalStats.getOrDefault(ItemState.APPROVED,0)+lastIntervalStats.getOrDefault(ItemState.REVOKED,0); bigIntervalApproved += smallIntervalApproved; uptimeApproved += smallIntervalApproved; lastIntervalStats.keySet().forEach(is -> ledgerSize.put(is, ledgerSize.getOrDefault(is,0) + lastIntervalStats.get(is))); while (ledgerHistoryTimestamps.getFirst().plus(bigInterval).isBefore(now)) { ledgerHistoryTimestamps.removeFirst(); bigIntervalApproved -= ledgerStatsHistory.removeFirst().get(ItemState.APPROVED) + lastIntervalStats.getOrDefault(ItemState.REVOKED,0); } lastStatsBuildTime = now; Map<Integer, Integer> payments = ledger.getPayments(now.truncatedTo(ChronoUnit.DAYS).minusDays(now.getDayOfMonth()-1).minusMonths(1)); payments.keySet().forEach( day -> { }); return true; }
public void init(Ledger ledger, Config config) { ledgerStatsHistory.clear(); ledgerHistoryTimestamps.clear(); smallIntervalApproved = 0; bigIntervalApproved = 0; uptimeApproved = 0; bigInterval = config.getStatsIntervalBig(); smallInterval = config.getStatsIntervalSmall(); nodeStartTime = ZonedDateTime.now(); lastStatsBuildTime = nodeStartTime; ledgerSize = ledger.getLedgerSize(null); DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); builder.appendValue(ChronoField.DAY_OF_MONTH,2); builder.appendLiteral("/"); builder.appendValue(ChronoField.MONTH_OF_YEAR,2); builder.appendLiteral("/"); builder.appendValue(ChronoField.YEAR,4); formatter = builder.toFormatter(); }
assertEquals(config.getKeysWhiteList(), copyConfig.getKeysWhiteList()); assertEquals(config.getMaxDiskCacheAge(), copyConfig.getMaxDiskCacheAge()); assertEquals(config.getStatsIntervalSmall(), copyConfig.getStatsIntervalSmall()); assertEquals(config.getStatsIntervalBig(), copyConfig.getStatsIntervalBig()); assertEquals(config.getExpriedNamesCleanupInterval(), copyConfig.getExpriedNamesCleanupInterval());