@Override public int getQueueSize(String queueId, Work.State state) { switch (state) { case SCHEDULED: return getMetrics(queueId).getScheduled().intValue(); case RUNNING: return getMetrics(queueId).getRunning().intValue(); default: return 0; } }
@Override synchronized protected WorkQueueMetrics metrics() { return new WorkQueueMetrics(queueId, scheduledCount, runningCount, completedCount, cancelledCount); }
public boolean canStartPurge() { WorkManager workManager = Framework.getLocalService(WorkManager.class); return workManager.getMetrics(PermissionsPurgeWork.CATEGORY).getRunning().intValue() <= 0; }
protected boolean awaitCompletionOnQueue(String queueId, long duration, TimeUnit unit) throws InterruptedException { if (!isStarted()) { return true; } log.debug("awaitCompletion " + queueId + " starting"); // wait for the lag to be null long durationMs = min(unit.toMillis(duration), TimeUnit.DAYS.toMillis(1)); // prevent overflow long deadline = System.currentTimeMillis() + durationMs; while (System.currentTimeMillis() < deadline) { Thread.sleep(100); int lag = getMetrics(queueId).getScheduled().intValue(); if (lag == 0) { if (log.isDebugEnabled()) { log.debug("awaitCompletion for " + queueId + " completed " + getMetrics(queueId)); } return true; } if (!log.isDebugEnabled()) { log.debug("awaitCompletion for " + queueId + " not completed " + getMetrics(queueId)); } } log.warn(String.format("%s timeout after: %.2fs, %s", queueId, durationMs / 1000.0, getMetrics(queueId))); return false; }
public boolean canStartPurge() { WorkManager workManager = Framework.getService(WorkManager.class); return workManager.getMetrics(PermissionsPurgeWork.CATEGORY).getRunning().intValue() <= 0; }
WorkQueueMetrics metrics(String queueId, Number[] counters) { return new WorkQueueMetrics(queueId, counters[0], counters[1], counters[2], counters[3]); }
@Override public WorkQueueMetrics getMetrics(String queueId) { LogLag lag = logManager.getLag(queueId, queueId); long running = 0; if (lag.lag() > 0) { // we don't have the exact running metric // give an approximation that can be higher that actual one because of the over provisioning running = min(lag.lag(), settings.getPartitions(queueId)); } return new WorkQueueMetrics(queueId, lag.lag(), running, lag.lower(), 0); }