io.opentelemetry.sdk.metrics.internal.data.MutableExponentialHistogramPointData Maven / Gradle / Ivy
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.sdk.metrics.internal.data;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.sdk.metrics.data.DoubleExemplarData;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramBuckets;
import io.opentelemetry.sdk.metrics.data.ExponentialHistogramPointData;
import java.util.Collections;
import java.util.List;
/**
* A mutable {@link ExponentialHistogramPointData}
*
* This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*
*
This class is not thread-safe.
*/
public final class MutableExponentialHistogramPointData implements ExponentialHistogramPointData {
private long startEpochNanos;
private long epochNanos;
private Attributes attributes = Attributes.empty();
private int scale;
private double sum;
private long count;
private long zeroCount;
private boolean hasMin;
private double min;
private boolean hasMax;
private double max;
private ExponentialHistogramBuckets positiveBuckets = EmptyExponentialHistogramBuckets.get(0);
private ExponentialHistogramBuckets negativeBuckets = EmptyExponentialHistogramBuckets.get(0);
private List exemplars = Collections.emptyList();
@Override
public int getScale() {
return scale;
}
@Override
public double getSum() {
return sum;
}
@Override
public long getCount() {
return count;
}
@Override
public long getZeroCount() {
return zeroCount;
}
@Override
public boolean hasMin() {
return hasMin;
}
@Override
public double getMin() {
return min;
}
@Override
public boolean hasMax() {
return hasMax;
}
@Override
public double getMax() {
return max;
}
@Override
public ExponentialHistogramBuckets getPositiveBuckets() {
return positiveBuckets;
}
@Override
public ExponentialHistogramBuckets getNegativeBuckets() {
return negativeBuckets;
}
@Override
public long getStartEpochNanos() {
return startEpochNanos;
}
@Override
public long getEpochNanos() {
return epochNanos;
}
@Override
public Attributes getAttributes() {
return attributes;
}
@Override
public List getExemplars() {
return exemplars;
}
@SuppressWarnings("TooManyParameters")
public ExponentialHistogramPointData set(
int scale,
double sum,
long zeroCount,
boolean hasMin,
double min,
boolean hasMax,
double max,
ExponentialHistogramBuckets positiveBuckets,
ExponentialHistogramBuckets negativeBuckets,
long startEpochNanos,
long epochNanos,
Attributes attributes,
List exemplars) {
this.count = zeroCount + positiveBuckets.getTotalCount() + negativeBuckets.getTotalCount();
this.scale = scale;
this.sum = sum;
this.zeroCount = zeroCount;
this.hasMin = hasMin;
this.min = min;
this.hasMax = hasMax;
this.max = max;
this.positiveBuckets = positiveBuckets;
this.negativeBuckets = negativeBuckets;
this.startEpochNanos = startEpochNanos;
this.epochNanos = epochNanos;
this.attributes = attributes;
this.exemplars = exemplars;
return this;
}
@Override
public String toString() {
return "MutableExponentialHistogramPointData{"
+ "startEpochNanos="
+ startEpochNanos
+ ", "
+ "epochNanos="
+ epochNanos
+ ", "
+ "attributes="
+ attributes
+ ", "
+ "scale="
+ scale
+ ", "
+ "sum="
+ sum
+ ", "
+ "count="
+ count
+ ", "
+ "zeroCount="
+ zeroCount
+ ", "
+ "hasMin="
+ hasMin
+ ", "
+ "min="
+ min
+ ", "
+ "hasMax="
+ hasMax
+ ", "
+ "max="
+ max
+ ", "
+ "positiveBuckets="
+ positiveBuckets
+ ", "
+ "negativeBuckets="
+ negativeBuckets
+ ", "
+ "exemplars="
+ exemplars
+ "}";
}
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o instanceof ExponentialHistogramPointData) {
ExponentialHistogramPointData that = (ExponentialHistogramPointData) o;
return this.startEpochNanos == that.getStartEpochNanos()
&& this.epochNanos == that.getEpochNanos()
&& this.attributes.equals(that.getAttributes())
&& this.scale == that.getScale()
&& Double.doubleToLongBits(this.sum) == Double.doubleToLongBits(that.getSum())
&& this.count == that.getCount()
&& this.zeroCount == that.getZeroCount()
&& this.hasMin == that.hasMin()
&& Double.doubleToLongBits(this.min) == Double.doubleToLongBits(that.getMin())
&& this.hasMax == that.hasMax()
&& Double.doubleToLongBits(this.max) == Double.doubleToLongBits(that.getMax())
&& this.positiveBuckets.equals(that.getPositiveBuckets())
&& this.negativeBuckets.equals(that.getNegativeBuckets())
&& this.exemplars.equals(that.getExemplars());
}
return false;
}
@Override
public int hashCode() {
int hash = 1;
hash *= 1000003;
hash ^= (int) ((startEpochNanos >>> 32) ^ startEpochNanos);
hash *= 1000003;
hash ^= (int) ((epochNanos >>> 32) ^ epochNanos);
hash *= 1000003;
hash ^= attributes.hashCode();
hash *= 1000003;
hash ^= scale;
hash *= 1000003;
hash ^= (int) ((Double.doubleToLongBits(sum) >>> 32) ^ Double.doubleToLongBits(sum));
hash *= 1000003;
hash ^= (int) ((count >>> 32) ^ count);
hash *= 1000003;
hash ^= (int) ((zeroCount >>> 32) ^ zeroCount);
hash *= 1000003;
hash ^= hasMin ? 1231 : 1237;
hash *= 1000003;
hash ^= (int) ((Double.doubleToLongBits(min) >>> 32) ^ Double.doubleToLongBits(min));
hash *= 1000003;
hash ^= hasMax ? 1231 : 1237;
hash *= 1000003;
hash ^= (int) ((Double.doubleToLongBits(max) >>> 32) ^ Double.doubleToLongBits(max));
hash *= 1000003;
hash ^= positiveBuckets.hashCode();
hash *= 1000003;
hash ^= negativeBuckets.hashCode();
hash *= 1000003;
hash ^= exemplars.hashCode();
return hash;
}
}