Skip to content

Commit

Permalink
Add Metric Instrument Registry (#11103)
Browse files Browse the repository at this point in the history
* added metric instrument registry
  • Loading branch information
DNVindhya committed Apr 12, 2024
1 parent 34e241a commit 497e155
Show file tree
Hide file tree
Showing 8 changed files with 530 additions and 0 deletions.
30 changes: 30 additions & 0 deletions api/src/main/java/io/grpc/DoubleCounterMetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a double-valued counter metric instrument.
*/
@Internal
public final class DoubleCounterMetricInstrument extends PartialMetricInstrument {
DoubleCounterMetricInstrument(long index, String name, String description, String unit,
List<String> requiredLabelKeys, List<String> optionalLabelKeys, boolean enableByDefault) {
super(index, name, description, unit, requiredLabelKeys, optionalLabelKeys, enableByDefault);
}
}
38 changes: 38 additions & 0 deletions api/src/main/java/io/grpc/DoubleHistogramMetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a double-valued histogram metric instrument.
*/
@Internal
public final class DoubleHistogramMetricInstrument extends PartialMetricInstrument {
private final List<Double> bucketBoundaries;

DoubleHistogramMetricInstrument(long index, String name, String description, String unit,
List<Double> bucketBoundaries, List<String> requiredLabelKeys, List<String> optionalLabelKeys,
boolean enableByDefault) {
super(index, name, description, unit, requiredLabelKeys, optionalLabelKeys, enableByDefault);
this.bucketBoundaries = bucketBoundaries;
}

public List<Double> getBucketBoundaries() {
return bucketBoundaries;
}
}
30 changes: 30 additions & 0 deletions api/src/main/java/io/grpc/LongCounterMetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a long-valued counter metric instrument.
*/
@Internal
public final class LongCounterMetricInstrument extends PartialMetricInstrument {
LongCounterMetricInstrument(long index, String name, String description, String unit,
List<String> requiredLabelKeys, List<String> optionalLabelKeys, boolean enableByDefault) {
super(index, name, description, unit, requiredLabelKeys, optionalLabelKeys, enableByDefault);
}
}
30 changes: 30 additions & 0 deletions api/src/main/java/io/grpc/LongGaugeMetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a long-valued gauge metric instrument.
*/
@Internal
public final class LongGaugeMetricInstrument extends PartialMetricInstrument {
LongGaugeMetricInstrument(long index, String name, String description, String unit,
List<String> requiredLabelKeys, List<String> optionalLabelKeys, boolean enableByDefault) {
super(index, name, description, unit, requiredLabelKeys, optionalLabelKeys, enableByDefault);
}
}
38 changes: 38 additions & 0 deletions api/src/main/java/io/grpc/LongHistogramMetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a long-valued histogram metric instrument.
*/
@Internal
public final class LongHistogramMetricInstrument extends PartialMetricInstrument {
private final List<Long> bucketBoundaries;

LongHistogramMetricInstrument(long index, String name, String description, String unit,
List<Long> bucketBoundaries, List<String> requiredLabelKeys, List<String> optionalLabelKeys,
boolean enableByDefault) {
super(index, name, description, unit, requiredLabelKeys, optionalLabelKeys, enableByDefault);
this.bucketBoundaries = bucketBoundaries;
}

public List<Long> getBucketBoundaries() {
return bucketBoundaries;
}
}
75 changes: 75 additions & 0 deletions api/src/main/java/io/grpc/MetricInstrument.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright 2024 The gRPC Authors
*
* 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 io.grpc;

import java.util.List;

/**
* Represents a metric instrument. Metric instrument contains information used to describe a metric.
*/
@Internal
public interface MetricInstrument {
/**
* Returns the unique index of this metric instrument.
*
* @return the index of the metric instrument.
*/
public long getIndex();

/**
* Returns the name of the metric.
*
* @return the name of the metric.
*/
public String getName();

/**
* Returns a description of the metric.
*
* @return a description of the metric.
*/
public String getDescription();

/**
* Returns the unit of measurement for the metric.
*
* @return the unit of measurement.
*/
public String getUnit();

/**
* Returns a list of required label keys for this metric instrument.
*
* @return a list of required label keys.
*/
public List<String> getRequiredLabelKeys();

/**
* Returns a list of optional label keys for this metric instrument.
*
* @return a list of optional label keys.
*/
public List<String> getOptionalLabelKeys();

/**
* Indicates whether this metric instrument is enabled by default.
*
* @return {@code true} if this metric instrument is enabled by default,
* {@code false} otherwise.
*/
public boolean isEnableByDefault();
}

0 comments on commit 497e155

Please sign in to comment.