All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avanza.astrix.context.metrics.TimerSnaphot Maven / Gradle / Ivy

/*
 * Copyright 2014 Avanza Bank AB
 *
 * 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.avanza.astrix.context.metrics;

import java.util.concurrent.TimeUnit;

public class TimerSnaphot {
	
	private final long count;
	private final double _90thPercentileLatency;
	private final double _99thPercentileLatency;
	private final double _50thPercentileLatency;
	private final double maxLatency;
	private final double meanRate;
	private final double minLatency;
	private final double oneMinuteRate;
	private final TimeUnit rateUnit;
	private final TimeUnit durationUnit;
	
	private TimerSnaphot(Builder builder) {
		this.count = builder.count;
		this._50thPercentileLatency = builder._50thPercentileLatency;
		this._99thPercentileLatency = builder._99thPercentileLatency;
		this._90thPercentileLatency = builder._90thPercentileLatency;
		this.maxLatency = builder.maxLatency;
		this.minLatency = builder.minLatency;
		this.meanRate = builder.meanRate;
		this.oneMinuteRate = builder.oneMinuteRate;
		this.rateUnit = builder.rateUnit;
		this.durationUnit = builder.durationUnit;
	}

	public long getCount() {
		return this.count;
	}
	
	/**
	 * 50th percentile execution time in {@link #getDurationUnit()} for (roughly)
	 * the last five minutes. 
	 * 
	 * @return
	 */
	public double get50thPercentile() {
		return this._50thPercentileLatency;
	}

	/**
	 * The 90th percentile execution time response times in {@link #getDurationUnit()} for (roughly)
	 * the last five minutes
	 * 
	 * @return
	 */
	public double get90thPercentile() {
		return _90thPercentileLatency;
	}
	
	/**
	 * The 99th percentile execution time response times in {@link #getDurationUnit()} for (roughly)
	 * the last five minutes
	 * 
	 * @return
	 */
	public double get99thPercentileLatency() {
		return this._99thPercentileLatency;
	}
	

	/**
	 * The maximum execution time 
	 * @return
	 */
	public double getMax() {
		return this.maxLatency;
	}

	public double getMeanRate() {
		return this.meanRate;
	}

	public double getMin() {
		return this.minLatency;
	}
	

	/**
	 * Executions/second for the last minute 
	 */
	public double getOneMinuteRate() {
		return this.oneMinuteRate;
	}
	
	/**
	 * The TimeUnit for all "durations" (hardcoded to 'MILLISECONDS' in current implementation)
	 */
	public TimeUnit getDurationUnit() {
		return durationUnit;
	}
	
	
	/**
	 * The TimeUnit for all "rates" (hardcoded to 'SECONDS' in current implementation)
	 */
	public TimeUnit getRateUnit() {
		return rateUnit;
	}

	public static TimerSnaphot empty() {
		return new TimerSnaphot.Builder().build();
	}
	
	public static TimerSnaphot.Builder builder() {
		return new Builder();
	}
	
	public static class Builder {
		private TimeUnit rateUnit = TimeUnit.MILLISECONDS;
		private long count;
		private double _99thPercentileLatency;
		private double _90thPercentileLatency;
		private double _50thPercentileLatency;
		private double maxLatency;
		private double minLatency;
		private double meanRate;
		private double oneMinuteRate;
		private TimeUnit durationUnit;
		
		public Builder count(long count) {
			this.count = count;
			return this;
		}
		
		public Builder rateUnit(TimeUnit rateUnit) {
			this.rateUnit = rateUnit;
			return this;
		}

		public Builder set99thPercentileLatency(double _99thPercentile) {
			this._99thPercentileLatency = _99thPercentile;
			return this;
		}
		
		public Builder set90thPercentileLatency(double _90thPercentile) {
			this._90thPercentileLatency = _90thPercentile;
			return this;
		}

		public Builder set50thPercentileLatency(double _50thPercentile) {
			this._50thPercentileLatency = _50thPercentile;
			return this;
		}

		public Builder maxLatency(double max) {
			this.maxLatency = max;
			return this;
		}

		public Builder meanRate(double meanRate) {
			this.meanRate = meanRate;
			return this;
		}

		public Builder minLatency(double min) {
			this.minLatency = min;
			return this;
		}

		public Builder oneMinuteRate(double oneMinuteRate) {
			this.oneMinuteRate = oneMinuteRate;
			return this;
		}
		
		public TimerSnaphot build() {
			return new TimerSnaphot(this);
		}

		public Builder durationUnit(TimeUnit durationUnit) {
			this.durationUnit = durationUnit;
			return this;
		}
		
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy