/*
* Copyright (c) 2008-2012, Hazel Bilisim Ltd. All Rights Reserved.
*
* Licensed 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 com.hazelcast.impl.monitor;
import com.hazelcast.monitor.LocalAtomicNumberOperationStats;
public class AtomicNumberOperationsCounter extends OperationsCounterSupport<LocalAtomicNumberOperationStats> {
final private static LocalAtomicNumberOperationStats empty = new LocalAtomicNumberOperationStatsImpl();
private OperationCounter modified = new OperationCounter();
private OperationCounter nonModified = new OperationCounter();
public AtomicNumberOperationsCounter() {
super();
}
public AtomicNumberOperationsCounter(long interval) {
super(interval);
}
public void incrementModified(long elapsed) {
modified.count(elapsed);
publishSubResult();
}
public void incrementNonModified(long elapsed) {
nonModified.count(elapsed);
publishSubResult();
}
LocalAtomicNumberOperationStats aggregateSubCounterStats() {
LocalAtomicNumberOperationStatsImpl stats = new LocalAtomicNumberOperationStatsImpl();
stats.periodStart = ((AtomicNumberOperationsCounter) listOfSubCounters.get(0)).startTime;
for (Object obj : listOfSubCounters) {
AtomicNumberOperationsCounter sub = (AtomicNumberOperationsCounter) obj;
stats.modified.add(sub.modified.count.get(), sub.modified.totalLatency.get());
stats.nonModified.add(sub.nonModified.count.get(), sub.nonModified.totalLatency.get());
stats.periodEnd = sub.endTime;
}
return stats;
}
AtomicNumberOperationsCounter getAndReset() {
AtomicNumberOperationsCounter newOne = new AtomicNumberOperationsCounter();
newOne.modified.set(modified.copyAndReset());
newOne.nonModified.set(nonModified.copyAndReset());
newOne.startTime = this.startTime;
newOne.endTime = now();
this.startTime = newOne.endTime;
return newOne;
}
LocalAtomicNumberOperationStats getThis() {
LocalAtomicNumberOperationStatsImpl stats = new LocalAtomicNumberOperationStatsImpl();
stats.periodStart = this.startTime;
stats.modified = stats.new OperationStat(this.modified.count.get(), this.modified.totalLatency.get());
stats.nonModified = stats.new OperationStat(this.nonModified.count.get(), this.nonModified.totalLatency.get());
stats.periodEnd = now();
return stats;
}
LocalAtomicNumberOperationStats getEmpty() {
return empty;
}
}