com.sun.enterprise.admin.monitor.stats.MutableTimeStatisticImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of stats77 Show documentation
Show all versions of stats77 Show documentation
Interim replacement for JSR 77 Stats and Statistics
/*
* Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.enterprise.admin.monitor.stats;
import org.glassfish.j2ee.statistics.TimeStatistic;
import org.glassfish.j2ee.statistics.Statistic;
/**
* An implementation of {@link MutableTimeStatistic} that eases the various
* statistical calculations.
*
* @author Kedar Mhaswade
* @since S1AS8.0
* @version $Revision: 1.2 $
*/
public class MutableTimeStatisticImpl implements TimeStatistic, MutableTimeStatistic {
private final TimeStatistic initial;
private long methodCount;
private long min;
private long max;
private long total; //possibility of an overflow?
private long lastSampleTime;
/**
* Constructs an instance of this class from its immutable equivalent. Note that there are
* some constraints on the parameter passed:
*
* - The maxTime, minTime and totTime of param must be same
*
*
* @param instance of (immutable) {@link TimeStatistic}
*/
public MutableTimeStatisticImpl(TimeStatistic initial) {
this.initial = initial;
methodCount = initial.getCount();
min = initial.getMinTime();
max = initial.getMaxTime();
total = initial.getTotalTime();
final boolean minMax = min == max;
final boolean minTot = min == total;
if (! (minMax && minTot)) {
throw new IllegalArgumentException("Invalid initial values: " + min + ", " + max + ", " + total);
}
lastSampleTime = initial.getLastSampleTime();
}
/**
* Increments the count of operation execution by 1 and also increases the time
* consumed. A successful execution of method will have all the data updated as:
*
* - method count ++
* - max time, min time and total time are accordingly adjusted
*
*
* @param current long indicating time in whatever unit this statistic is calculated
*/
@Override
public void incrementCount(long current) {
if (methodCount == 0) {
total = max = min = current;
} else {
total += current;
max = current >= max ? current : max;
min = current >= min ? min : current;
}
methodCount++;
lastSampleTime = System.currentTimeMillis();
}
/**
* Resets the Statistic. Calling this method has following effect:
*
* - Initial state of this Statistic is restored as far as Count, Minimum/Maximum
* and Total time of execution is considered.
*
*/
@Override
public void reset() {
methodCount = initial.getCount();
min = initial.getMinTime();
max = initial.getMaxTime();
total = initial.getTotalTime();
lastSampleTime = initial.getLastSampleTime();
}
/**
* This method is the essence of this class. Returns the unmodifiable view
* of this instance.
*
* @return an instance of {@link TimeStatistic}
*/
@Override
public Statistic unmodifiableView() {
return new TimeStatisticImpl(
this.methodCount,
this.max,
this.min,
this.total,
initial.getName(),
initial.getUnit(),
initial.getDescription(),
initial.getStartTime(),
this.lastSampleTime
);
}
@Override
public Statistic modifiableView() {
return ( this );
}
@Override
public long getCount() {
return ( this.methodCount);
}
@Override
public String getDescription() {
return ( initial.getDescription() );
}
@Override
public long getLastSampleTime() {
return ( this.lastSampleTime );
}
@Override
public long getMaxTime() {
return ( this.max );
}
@Override
public long getMinTime() {
return ( this.min );
}
@Override
public String getName() {
return ( initial.getName() );
}
@Override
public long getStartTime() {
return ( initial.getStartTime() );
}
@Override
public long getTotalTime() {
return ( this.total );
}
@Override
public String getUnit() {
return ( initial.getUnit() );
}
/* hack: bug 5045413 */
public void setDescription (final String s) {
try {
((StatisticImpl)this.initial).setDescription(s);
}
catch(final Exception e) {
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy