test_class.file: central/src/test/java/org/glowroot/central/RollupServiceTest.java
test_class.identifier: RollupServiceTest
test_case.body: @Test
      public void test() {
          assertThat(RollupService.millisUntilNextRollup(15000)).isEqualTo(55000);
          assertThat(RollupService.millisUntilNextRollup(30000)).isEqualTo(40000);
          assertThat(RollupService.millisUntilNextRollup(45000)).isEqualTo(25000);
          assertThat(RollupService.millisUntilNextRollup(60000)).isEqualTo(10000);
      }
test_case.class_method_signature: RollupServiceTest.test()
test_case.full_signature: @Test public void test()
test_case.identifier: test
test_case.invocations: isEqualTo assertThat millisUntilNextRollup isEqualTo assertThat millisUntilNextRollup isEqualTo assertThat millisUntilNextRollup isEqualTo assertThat millisUntilNextRollup
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void test()
focal_class.declarator: MIN_WORKER_THREADS = 1
focal_class.modifier: private static final
focal_class.original_string: private static final int MIN_WORKER_THREADS = 1;
focal_class.type: int
focal_class.var_name: MIN_WORKER_THREADS
focal_class.declarator: MAX_WORKER_THREADS = 4
focal_class.modifier: private static final
focal_class.original_string: private static final int MAX_WORKER_THREADS = 4;
focal_class.type: int
focal_class.var_name: MAX_WORKER_THREADS
focal_class.declarator: INITIAL_WORKER_THREADS = 2
focal_class.modifier: private static final
focal_class.original_string: private static final int INITIAL_WORKER_THREADS = 2;
focal_class.type: int
focal_class.var_name: INITIAL_WORKER_THREADS
focal_class.declarator: logger = LoggerFactory.getLogger(RollupService.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(RollupService.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: activeAgentDao
focal_class.modifier: private final
focal_class.original_string: private final ActiveAgentDao activeAgentDao;
focal_class.type: ActiveAgentDao
focal_class.var_name: activeAgentDao
focal_class.declarator: aggregateDao
focal_class.modifier: private final
focal_class.original_string: private final AggregateDao aggregateDao;
focal_class.type: AggregateDao
focal_class.var_name: aggregateDao
focal_class.declarator: gaugeValueDao
focal_class.modifier: private final
focal_class.original_string: private final GaugeValueDao gaugeValueDao;
focal_class.type: GaugeValueDao
focal_class.var_name: gaugeValueDao
focal_class.declarator: syntheticResultDao
focal_class.modifier: private final
focal_class.original_string: private final SyntheticResultDao syntheticResultDao;
focal_class.type: SyntheticResultDao
focal_class.var_name: syntheticResultDao
focal_class.declarator: centralAlertingService
focal_class.modifier: private final
focal_class.original_string: private final CentralAlertingService centralAlertingService;
focal_class.type: CentralAlertingService
focal_class.var_name: centralAlertingService
focal_class.declarator: clock
focal_class.modifier: private final
focal_class.original_string: private final Clock clock;
focal_class.type: Clock
focal_class.var_name: clock
focal_class.declarator: mainLoopExecutor
focal_class.modifier: private final
focal_class.original_string: private final ExecutorService mainLoopExecutor;
focal_class.type: ExecutorService
focal_class.var_name: mainLoopExecutor
focal_class.declarator: closed
focal_class.modifier: private volatile
focal_class.original_string: private volatile boolean closed;
focal_class.type: boolean
focal_class.var_name: closed
focal_class.file: central/src/main/java/org/glowroot/central/RollupService.java
focal_class.identifier: RollupService
focal_class.interfaces: implements Runnable
focal_class.class_method_signature: RollupService.RollupService(ActiveAgentDao activeAgentDao, AggregateDao aggregateDao,
              GaugeValueDao gaugeValueDao, SyntheticResultDao syntheticResultDao,
              CentralAlertingService centralAlertingService, Clock clock)
focal_class.full_signature:   RollupService(ActiveAgentDao activeAgentDao, AggregateDao aggregateDao,
              GaugeValueDao gaugeValueDao, SyntheticResultDao syntheticResultDao,
              CentralAlertingService centralAlertingService, Clock clock)
focal_class.identifier: RollupService
focal_class.parameters: (ActiveAgentDao activeAgentDao, AggregateDao aggregateDao,
              GaugeValueDao gaugeValueDao, SyntheticResultDao syntheticResultDao,
              CentralAlertingService centralAlertingService, Clock clock)
focal_class.signature:  RollupService(ActiveAgentDao activeAgentDao, AggregateDao aggregateDao,
              GaugeValueDao gaugeValueDao, SyntheticResultDao syntheticResultDao,
              CentralAlertingService centralAlertingService, Clock clock)
focal_class.class_method_signature: RollupService.run()
focal_class.full_signature: @Override public void run()
focal_class.identifier: run
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void run()
focal_class.class_method_signature: RollupService.close()
focal_class.full_signature:  void close()
focal_class.identifier: close
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void close()
focal_class.class_method_signature: RollupService.runInternal(List<AgentRollup> agentRollups,
              ListeningExecutorService workerExecutor)
focal_class.full_signature: @Instrumentation.Transaction(transactionType = "Background", transactionName = "Outer rollup loop", traceHeadline = "Outer rollup loop", timer = "outer rollup loop") private void runInternal(List<AgentRollup> agentRollups,
              ListeningExecutorService workerExecutor)
focal_class.identifier: runInternal
focal_class.modifiers: @Instrumentation.Transaction(transactionType = "Background", transactionName = "Outer rollup loop", traceHeadline = "Outer rollup loop", timer = "outer rollup loop") private
focal_class.parameters: (List<AgentRollup> agentRollups,
              ListeningExecutorService workerExecutor)
focal_class.return: void
focal_class.signature: void runInternal(List<AgentRollup> agentRollups,
              ListeningExecutorService workerExecutor)
focal_class.class_method_signature: RollupService.rollupAggregates(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.full_signature: private List<Future<?>> rollupAggregates(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.identifier: rollupAggregates
focal_class.modifiers: private
focal_class.parameters: (AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.return: List<Future<?>>
focal_class.signature: List<Future<?>> rollupAggregates(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.class_method_signature: RollupService.rollupGauges(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.full_signature: private ListenableFuture<?> rollupGauges(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.identifier: rollupGauges
focal_class.modifiers: private
focal_class.parameters: (AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.return: ListenableFuture<?>
focal_class.signature: ListenableFuture<?> rollupGauges(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.class_method_signature: RollupService.rollupSyntheticMonitors(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.full_signature: private List<Future<?>> rollupSyntheticMonitors(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.identifier: rollupSyntheticMonitors
focal_class.modifiers: private
focal_class.parameters: (AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.return: List<Future<?>>
focal_class.signature: List<Future<?>> rollupSyntheticMonitors(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.class_method_signature: RollupService.checkAggregateAndGaugeAndHeartbeatAlertsAsync(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.full_signature: private List<Future<?>> checkAggregateAndGaugeAndHeartbeatAlertsAsync(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.identifier: checkAggregateAndGaugeAndHeartbeatAlertsAsync
focal_class.modifiers: private
focal_class.parameters: (AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.return: List<Future<?>>
focal_class.signature: List<Future<?>> checkAggregateAndGaugeAndHeartbeatAlertsAsync(AgentRollup agentRollup,
              ListeningExecutorService workerExecutor)
focal_class.class_method_signature: RollupService.newWorkerExecutor(int numWorkerThreads)
focal_class.full_signature: private static ListeningExecutorService newWorkerExecutor(int numWorkerThreads)
focal_class.identifier: newWorkerExecutor
focal_class.modifiers: private static
focal_class.parameters: (int numWorkerThreads)
focal_class.return: ListeningExecutorService
focal_class.signature: ListeningExecutorService newWorkerExecutor(int numWorkerThreads)
focal_class.class_method_signature: RollupService.shuffle(List<T> agentRollups)
focal_class.full_signature: private static List<T> shuffle(List<T> agentRollups)
focal_class.identifier: shuffle
focal_class.modifiers: private static
focal_class.parameters: (List<T> agentRollups)
focal_class.return: List<T>
focal_class.signature: List<T> shuffle(List<T> agentRollups)
focal_class.class_method_signature: RollupService.count(List<AgentRollup> agentRollups)
focal_class.full_signature: private static int count(List<AgentRollup> agentRollups)
focal_class.identifier: count
focal_class.modifiers: private static
focal_class.parameters: (List<AgentRollup> agentRollups)
focal_class.return: int
focal_class.signature: int count(List<AgentRollup> agentRollups)
focal_class.class_method_signature: RollupService.millisUntilNextRollup(long currentTimeMillis)
focal_class.full_signature: @VisibleForTesting static long millisUntilNextRollup(long currentTimeMillis)
focal_class.identifier: millisUntilNextRollup
focal_class.modifiers: @VisibleForTesting static
focal_class.parameters: (long currentTimeMillis)
focal_class.return: long
focal_class.signature: long millisUntilNextRollup(long currentTimeMillis)
focal_class.class_method_signature: RollupService.castInitialized(/*@UnderInitialization*/ T obj)
focal_class.full_signature: @SuppressWarnings("return.type.incompatible") private static T castInitialized(/*@UnderInitialization*/ T obj)
focal_class.identifier: castInitialized
focal_class.modifiers: @SuppressWarnings("return.type.incompatible") private static
focal_class.parameters: (/*@UnderInitialization*/ T obj)
focal_class.return: T
focal_class.signature: T castInitialized(/*@UnderInitialization*/ T obj)
focal_method.body: @VisibleForTesting
      static long millisUntilNextRollup(long currentTimeMillis) {
          return 60000 - (currentTimeMillis - 10000) % 60000;
      }
focal_method.class_method_signature: RollupService.millisUntilNextRollup(long currentTimeMillis)
focal_method.full_signature: @VisibleForTesting static long millisUntilNextRollup(long currentTimeMillis)
focal_method.identifier: millisUntilNextRollup
focal_method.modifiers: @VisibleForTesting static
focal_method.parameters: (long currentTimeMillis)
focal_method.return: long
focal_method.signature: long millisUntilNextRollup(long currentTimeMillis)