private void periodicallyPrintStats() { long now = System.currentTimeMillis(); long prev = lastPrinted.get(); if (now - prev > STATS_INTERVAL) { if (lastPrinted.compareAndSet(prev, now)) { log.debug("queue size: {} jobs, submitted: {} jobs/s, taken: {} jobs/s", getQueue().size(), submitted.throughput(), taken.throughput()); submitted.reset(); taken.reset(); } } }
@Override public <T> Future<T> submit(Callable<T> task) { Counter taskCounter = new Counter(); taskCounter.reset(); return executor.submit(() -> { T t = null; long queueWaitTime = (long) taskCounter.duration(); Class className; if (task instanceof CallableExtended) { className = ((CallableExtended) task).getRunnable().getClass(); } else { className = task.getClass(); } if (queueMetrics != null) { queueMetrics.update(queueWaitTime, TimeUnit.SECONDS); } taskCounter.reset(); try { t = task.call(); } catch (Exception e) { getLogger(className).error("Uncaught exception on " + className, e); } long taskwaittime = (long) taskCounter.duration(); if (delayMetrics != null) { delayMetrics.update(taskwaittime, TimeUnit.SECONDS); } return t; }); }