/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.sling.event.impl.jobs.stats; import org.apache.sling.event.jobs.TopicStatistics; /** * Implementation of the statistics. */ public class TopicStatisticsImpl implements TopicStatistics { private final String topic; private volatile long lastActivated = -1; private volatile long lastFinished = -1; private volatile long averageWaitingTime; private volatile long averageProcessingTime; private volatile long waitingTime; private volatile long processingTime; private volatile long waitingCount; private volatile long processingCount; private volatile long finishedJobs; private volatile long failedJobs; private volatile long cancelledJobs; /** Constructor. */ public TopicStatisticsImpl(final String topic) { this.topic = topic; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getTopic() */ @Override public String getTopic() { return this.topic; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getNumberOfProcessedJobs() */ @Override public synchronized long getNumberOfProcessedJobs() { return getNumberOfCancelledJobs() + getNumberOfFailedJobs() + getNumberOfFinishedJobs(); } /** * @see org.apache.sling.event.jobs.TopicStatistics#getAverageWaitingTime() */ @Override public synchronized long getAverageWaitingTime() { return averageWaitingTime; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getAverageProcessingTime() */ @Override public synchronized long getAverageProcessingTime() { return averageProcessingTime; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getNumberOfFinishedJobs() */ @Override public synchronized long getNumberOfFinishedJobs() { return finishedJobs; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getNumberOfCancelledJobs() */ @Override public synchronized long getNumberOfCancelledJobs() { return cancelledJobs; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getNumberOfFailedJobs() */ @Override public synchronized long getNumberOfFailedJobs() { return failedJobs; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getLastActivatedJobTime() */ @Override public synchronized long getLastActivatedJobTime() { return this.lastActivated; } /** * @see org.apache.sling.event.jobs.TopicStatistics#getLastFinishedJobTime() */ @Override public synchronized long getLastFinishedJobTime() { return this.lastFinished; } /** * Add a finished job. * @param jobTime The time of the job processing. */ public synchronized void addFinished(final long jobTime) { this.finishedJobs++; this.lastFinished = System.currentTimeMillis(); if ( jobTime > 0 ) { this.processingTime += jobTime; this.processingCount++; this.averageProcessingTime = this.processingTime / this.processingCount; } } /** * Add a started job. * @param queueTime The time of the job in the queue. */ public synchronized void addActivated(final long queueTime) { this.lastActivated = System.currentTimeMillis(); if ( queueTime > 0 ) { this.waitingTime += queueTime; this.waitingCount++; this.averageWaitingTime = this.waitingTime / this.waitingCount; } } /** * Add a failed job. */ public synchronized void addFailed() { this.failedJobs++; } /** * Add a cancelled job. */ public synchronized void addCancelled() { this.cancelledJobs++; } }